授予 fields_for 访问其他模型的权限

Give fields_for have access to additional model

我正在尝试呈现一个页面,用户可以在其中回答 Survey(从而创建 Application)。我可以 return 轻松地回答问题 (@survey.questions),我也可以使用构建器助手呈现用于回答问题的表单。

控制器:

@survey.questions.each do |question|
  @application.answers.build
end

查看:

<%= f.fields_for :answers do |builder| %>
  <%= builder.text_area :answer %>
<% end %>

但问题在于,这只会呈现用于回答问题的文本区域,而没有实际的问题文本。

将两者结合起来的正确方法是什么,以便我既可以显示问题又可以让用户回答?

能做这样的事情就好了:

<%= f.fields_for :answers do |builder| %>
  Q: <%= question.question %>
  A: <%= builder.text_area :answer %>
<% end %>

PS 如果有人可以建议更好的标题,请提出。

从 Rails 4.0.2 开始,您可以访问构建器对象上的索引。

<%= f.fields_for :answers do |builder| %>
  Q: <%= @suvery.questions[builder.index].question %>
  A: <%= builder.text_area :answer %>
<% end %>
<%= f.fields_for :answers do |builder| %>
  Q: <%= builder.label builder.object.question %>
  A: <%= builder.text_area :answer %>
<% end %>

如果它报告 builder.object 上的 question 调用错误,请执行 builder.object.inspect 以查看该对象的类型。