Rails:如何将客户名称添加到嵌套表单组件?

时间:2012-08-30 13:04:32

标签: ruby-on-rails forms

这是我关于SO的第一个问题。 W00t!

与此railscast一样,我可以创建一个调查模型和表单,接受accepted_nested_attributes_for问题,并且问题模型接受accept_nested_attributes_for答案。

如果用户已登录,则可以将其答案与其user_id相关联。但是,我想让客人也可以填写此表格。这将是降低参与障碍的好方法。

我希望访客用户能够将他们的名字添加到表单中,以便其他用户可以区分尚未创建帐户的访客。为此,我在答案模型中创建了一个guest_name字段。

问题:如果他们将名称添加到之后的表格中,他们会创建新的答案,我该如何将他们的名字与他们的答案相关联?

inside surveys_controller.rb我目前正在创建一个名为@responding_user_id的变量,并将其设置为已登录用户的ID,或者如果没有人登录则将其设置为0:

@responding_user_id = (current_user ? current_user.id : 0)

以便在answer.html.erb内,我可以将签名用户的ID与他/她的答案相关联:

<%= f.hidden_field :user_id, :value => @responding_user_id %>

在调查中,用户可以看到多个问题,他们可以通过点击名为_question_fields.html.erb的部分中的“添加答案”链接为任何问题添加一个或多个答案:

<%= f.fields_for :answers do |builder| %>
<%= render 'answer_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add a New Response", f, :answers %>

我想我可以强制他们在添加答案之前输入他们的名字,然后通过jQuery更改隐藏的user_id字段,但这不是最佳的用户体验。

我遇到问题的唯一部分是将访客姓名分配给答案的隐藏user_id字段。这很困难的原因是当用户点击“添加答案”时会生成隐藏字段的HTML,此时他们可能还没有输入他们的访客名称。

也许唯一的方法是使用上面提到的jQuery?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,你想在这里存储客人的名字吗?您只有一个user_id字段。所以你必须改变你的模型。