这是我关于 SO 的第一个问题。哇!
就像在这个railscast中一样,我能够创建一个调查模型和表单,它接受 Accept_nested_attributes_for 问题,问题模型接受_nested_attributes_for 答案。
如果用户已登录,那么我可以将他们的答案与他们的 user_id 相关联。但是,我想让客人也可以填写此表格。这将是降低参与门槛的好方法。
我希望来宾用户能够将他们的名字添加到表单中,以便其他用户可以区分尚未创建帐户的来宾。为此,我在答案模型中创建了一个 guest_name 字段。
问题:如果他们在创建新答案后将他们的名字添加到表单中,我如何将他们的名字与他们的答案相关联?
在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?
谢谢!!