2012-01-13 28 views
5

Tôi muốn redirect_to slider_path sau khi người dùng gửi email của họ. Hiện tại, chỉ thông báo thành công mới được hiển thị mà không có chuyển hướng. Dưới đây là mã:Ruby on Rails: redirect_to không hoạt động sau khi tạo và lưu

class Splash::SubscribersController < ApplicationController 

def create 

    @subscriber = Subscriber.new(params[:subscriber]) 

    if @subscriber.save 
    success = true 
    message = "Success! We'll let you know when we launch." 
    else 
    success = false 
    message = "Fail." 
    end 

    respond_to do |format| 
    format.html { 
     if success 
     flash[:success] = message 
     redirect_to slider_path 
     else 
     flash[:error] = message 
     end 
     redirect_to root_path 
    } 
    format.json { render :json => { :success => success, :message => message }.to_json } 
    end 
end 
end 

Trả lời

6

Chỉ cần thay thế phần này của mã của bạn:

if success 
    flash[:success] = message 
    redirect_to slider_path 
    else 
    flash[:error] = message 
    end 
    redirect_to root_path 

với điều này:

if success 
    flash[:success] = message 
    redirect_to slider_path 
    else 
    flash[:error] = message 
    redirect_to root_path 
    end 
2

Thêm tuyên bố trở lại sau khi chuyển hướng của bạn. Nếu hành động cũng hiển thị mẫu theo mặc định, bất kỳ chuyển hướng nào cần được theo sau bởi một câu lệnh trả về.

if success 
    flash[:success] = message 
    redirect_to slider_path 
    return     # <= Add a return. 
else 
    flash[:error] = message 
end 
redirect_to root_path 
6

Rails API trạng thái:

Một hành động có thể chứa chỉ một render đơn hoặc chuyển hướng duy nhất. Cố gắng cố gắng làm một trong hai một lần nữa sẽ dẫn đến một DoubleRenderError:

def do_something 
    redirect_to :action => "elsewhere" 
    render :action => "overthere" # raises DoubleRenderError 
end 

Nếu bạn cần phải chuyển hướng vào điều kiện của một cái gì đó, sau đó hãy chắc chắn để thêm “và trở lại” để ngăn chặn thực hiện.

def do_something 
    redirect_to(:action => "elsewhere") and return if monkeys.nil? 
    render :action => "overthere" # won't be called if monkeys is nil 
end 

Lưu ý việc sử dụng and return

2

Không chuyển hướng cũng không làm chấm dứt thực hiện các hành động , vì vậy nếu bạn muốn thoát khỏi một hành động sau khi chuyển hướng, bạn cần phải làm điều gì đó li ke "redirect_to (...) và trả về".

Các vấn đề liên quan