如何在Rails中提交两个单独的表单?

时间:2017-07-20 14:05:48

标签: ruby-on-rails forms

我有一份注册表格,并希望在提交第一份表格后将用户发送到可选的第二份表格。

Rails如何知道第二次提交与第一次提交表单有关?我有点理解Active Record关联(has_many,belongs_to),但我不太了解会话。

我可以将第二个表单的值放在带

的表中
class SecondFormAnswers < ActiveRecord::Base
   belongs_to :user
end

Rails是否自动将用户会话从第一次表单提交链接到第二次?

2 个答案:

答案 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]记录。