如何将对象从一个控制器传递到另一个控制器

时间:2017-09-18 12:50:32

标签: ruby-on-rails

如果保存失败,我想重定向到上一个视图,但显示错误消息。

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

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

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

3 个答案:

答案 0 :(得分: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的错误。

答案 1 :(得分:0)

您必须检查params[:errors]而不是errors

答案 2 :(得分:0)

你必须在redirect_to帮助器中传递参数,如下所示,

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

请检查佣金路线并传递相应的密钥,无论是:id,还是:user_id