【问题标题】:Rendering nested form partials in other controllers在其他控制器中渲染嵌套表单部分
【发布时间】:2011-10-09 22:40:27
【问题描述】:

我有三个资源:工作、问题和答案。 这些关系是: 约伯有很多问题;问题有很多答案;工作有很多答案。

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

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

由于表单都嵌套在作业/新视图中,我为答案表单创建了一个部分:

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

谢谢,如果您需要更多信息或说明,请告诉我。

【问题讨论】:

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


    【解决方案1】:

    尝试关注

       <%= render :partial=> '/partials/answer_fields', :f => builder %>
    

    代替

       <%= render 'partials/answer_fields', :f => builder %>
    

    【讨论】:

    • 这破坏了嵌套形式并返回错误:undefined local variable or method 'f' for #&lt;#&lt;Class:0x00000102d9b860&gt;:0x00000102d98d68&gt; 在部分文件中。
    • 尝试以下操作,然后:&lt;%= render :partial =&gt; 'partials/answer_fields', :locals =&gt; {:f =&gt; builder} %&gt;
    • 我遇到了类似的问题,:locals =&gt; {:f =&gt; builder} 神奇地解决了这个问题!这个法术是什么意思?
    【解决方案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 %>
    

    这对你有用吗?

    【讨论】:

    • 啊,那会,但是如何通过此表单创建工作和问题,以便用户可以在 answer_fields 部分回答它们?我是否只是将此代码复制到另一个视图并保留当前工作/新的原始工作和问题表单字段?
    • 所以我实现了这个,但发生的是它正在创建一个新工作和新问题,而不是为已经创建的工作和问题创建答案。回到带有调查的嵌套表单 railscast ,我需要维护(在您的情况下)调查问题和答案之间的关系。用户填写的答案需要与相应调查的问题相关联。就像我的工作问题回答关系一样。那有意义吗?我是不是走错路了?
    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多