2017-09-18 209 views
0

如果保存失败,我想重定向到先前的视图,但出现错误消息。如何将对象从一个控制器传递到另一个控制器

redirect_to user_path(@user_id), errors: @user.errors 

,但在视图中,当我检查errors我得到一个未定义的变量错误。

我没有使用相同的控制器新建和创建,所以我不能在new.html.erb中有@ user.errors.any。我有两个不同的控制器,一个是那里的形式,另一个是负责创建的控制器,如果创建没有发生,我需要重定向到前一个控制器。

+0

您必须将flash [:error]设置为预期的错误消息,那么您应该可以使用相同的flash [:error]在视图中访问它。 – Mohanraj

+0

我不想在这里使用flash @Mohanraj – gates

回答

0

你必须通过redirect_to的助手像下面里面的参数,

redirect_to user_path(id: @user_id, error: @user.errors.messages) 

请检查耙路线和传递适当键ID,无论是:ID,或:user_id说明

+0

params [:error] =>“#” 好吧,现在我可以在params中得到错误,但它是这样来的。我如何解析这个对象? – gates

+0

尝试转换为json像@ user.errors.to_json – Mohanraj

+0

我认为,我会更喜欢user.errors.messages ..谢谢 – gates

0

必须检查params[:errors]errors

+0

我无法访问.. params [:errors],它显示为零。 – gates

1

您可能需要使用render,而不是redirect_to。 事情是这样的:

# controller_1 
def step_1 
    @user = User.new 
    @user.do_something 
    ... 
end 

# controller_2 
def step_2 
if @user.save? 
    # redirect to another... 
else 
    render 'controller_1/step_1` 
end 
end 

然后在视图step_1.html.erb,可以打印出的@user错误与@user.errors

相关问题