在Rails中传递2个视图/控制器的变量

时间:2017-02-08 13:57:20

标签: ruby-on-rails

我正在尝试创建一个2页注册表单,用户首先使用UsersController输入他们的电子邮件和密码,然后使用{DetailsController指向第二页以获取个人信息(例如姓名,年龄) {1}}。这两个表以一对一的关系链接。

如何将user_id字段从UsersController传递到DetailsController,以便保持关系?

User.first已在示例中进行了硬编码。但是,我想将新的user_id传递给@detail.user变量。

def create
  @detail = Detail.new(detail_params)
  @detail.user = User.first
  if @detail.save 
    flash[:notice] = "Your Details has been successfully saved"
    redirect_to detail_path(@detail)
  else
    render 'new'
  end
end

2 个答案:

答案 0 :(得分:0)

实现此目的的众多方法之一是将Detail作为User的嵌套资源:

# config/routes.rb
resources :users do
  resources :details
end

然后新细节页面的路线如下所示:/users/:user_id/details/new。它允许您将用户从create中的UsersController操作重定向到第2页:

# app/controllers/users_controller.rb
def create
# ...
if @user.save
  redirect_to new_details_path(user_id: @user.id)
else
  render 'new'
end

在您的DetailsController中,您将能够从params获取user_id

# app/controllers/details_controller.rb
def create
  @user = User.find(params[:user_id])
  @detail = @user.detail.build(detail_params)
  # ...

答案 1 :(得分:0)

使用会话。他们是免费的。示例=> session[:foo] = 'bar'

您可以在下一页上访问它,例如session[:foo]。如果要清除会话,只需将其设置为nil。