在其他控制器中呈现嵌套的表单部分

时间:2011-07-21 05:37:21

标签: ruby-on-rails partial-views nested-forms renderpartial nested-resources

我有三个资源:工作,问题和答案。 关系是:工作有很多问题;问题有很多答案;工作有很多答案。

我已在作业/新视图中嵌套了所有表单。

现在该应用程序的目标是让管理员(我们)在管理墙后面创建工作和问题。一旦我们这样做,我们想列出为每个特定工作创建的问题,并让用户回答问题。这需要将答案表格放在另一个不在管理墙后面的视图(相同或不同的控制器)上。

由于表单都嵌套在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)创建此视图的最佳位置在哪里?我最初的想法是另一个工作视图,因为它将嵌套在父资源下,但我不完全确定这是否有效。

如果您需要更多信息或说明,请与我们联系。

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 %>

这会对你有用吗?