我有三个资源:工作,问题和答案。 关系是:工作有很多问题;问题有很多答案;工作有很多答案。
我已在作业/新视图中嵌套了所有表单。
现在该应用程序的目标是让管理员(我们)在管理墙后面创建工作和问题。一旦我们这样做,我们想列出为每个特定工作创建的问题,并让用户回答问题。这需要将答案表格放在另一个不在管理墙后面的视图(相同或不同的控制器)上。
由于表单都嵌套在jobs / new视图上,因此我为答案表单创建了一个部分:
<%= form_for(@job) do |f| %>
<%= f.label :name %><br />
<%= f.text_field :name %>
<%= f.fields_for :questions do |builder| %>
<%= render 'question_fields', :f => builder %>
<% end %>
<%= f.submit %>
<% end %>
问题部分是:
<%= f.label :question, "Question" %>
<%= f.text_area :question, :rows => 10 %>
<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove Question" %>
<%= f.fields_for :answers do |builder| %>
<%= render 'partials/answer_fields', :f => builder %>
<% end %>
答案部分是:
<%= f.label "Answer" %>
<%= f.text_area :answer, :rows => 10 %>
<%= f.hidden_field :question_id, :value => @question %>
<%= f.hidden_field :job_id, :value => @job.id %>
我的想法是,我创建了一个部分,我将能够在应用程序中的任何地方引用它,但我一直在尝试一切,我似乎无法让它工作。
我在这个设置中基本上有两个问题:
1)我如何在另一个视图上单独渲染答案(什么是正确的代码)? 2)创建此视图的最佳位置在哪里?我最初的想法是另一个工作视图,因为它将嵌套在父资源下,但我不完全确定这是否有效。
如果您需要更多信息或说明,请与我们联系。
答案 0 :(得分:2)
尝试以下
<%= render :partial=> '/partials/answer_fields', :f => builder %>
而不是
<%= render 'partials/answer_fields', :f => builder %>
答案 1 :(得分:2)
如何保持与此处相同的结构,但不渲染与Job和Question模型相关的任何字段?这样,嵌套仍将传递给控制器,您无需更改该功能。
<%= form_for(@job) do |f| %>
<%= f.fields_for :questions do |q| %>
<%= q.fields_for :answers do |a| %>
<%= render 'partials/answer_fields', :f => a %>
<% end %>
<% end %>
<% end %>
这会对你有用吗?