我有一份注册表格,并希望在提交第一份表格后将用户发送到可选的第二份表格。
Rails如何知道第二次提交与第一次提交表单有关?我有点理解Active Record关联(has_many,belongs_to),但我不太了解会话。
我可以将第二个表单的值放在带
的表中class SecondFormAnswers < ActiveRecord::Base
belongs_to :user
end
Rails是否自动将用户会话从第一次表单提交链接到第二次?
答案 0 :(得分:0)
您可以通过accepts nested attributes收集相关模型的属性。您可以使用fields for构建表单。
您可以将其放在用户类
中accepts_nested_attributes_for :second_form_answers
然后在“用户”表单中,您可以使用fields_for
通过输入收集值。
f.fields_for :second_form_answers do |second_form_answer|
second_form_answer.input :attribute
然后你可以在页面上隐藏第二个表单。如果他们想要完成表单的第二部分,他们可以单击一个按钮并使用JQuery显示它。
$(document).on(ready, function() {
$('.second-form-button').on('click', function() {
$('.second-form').show();
});
});
您还可以对接受嵌套属性执行reject_if: :all_blank
。这样,如果他们决定不做第二部分,如果所有输入都是空白的,嵌套属性将不会评估它。
accepts_nested_attributes_for :second_form_answers, reject_if: :all_blank
答案 1 :(得分:0)
为此制作一个单独的模型是一种糟糕的做法。
您应该将User.id
保存到控制器中的Cookie中。
假设您正在创建新用户:
class User < ApplicationController
def create
@user = User.create(user_params)
session["user_id"] = @user.id
redirect_to edit_user_path(@user)
end
def edit
@user = User.find(session["user_id"])
@user.update(user_params)
end
end
当然这仅仅是为了详细解决问题的解决方案。你应该根据自己的逻辑进行调整。但也许您甚至可以向ApplicationController
添加方法,例如current_user
(作为辅助方法),以从User
值获取session[:user_id]
记录。