授予 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
以查看该对象的类型。
我正在尝试呈现一个页面,用户可以在其中回答 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
以查看该对象的类型。