【问题标题】:Form_for in a loop循环中的 Form_for
【发布时间】:2016-05-23 22:35:37
【问题描述】:

我确定我遗漏了一些简单的东西,但我正在生成一个项目列表,每个项目都有一个表格,以便为该特定项目添加新的试镜。表单未正确生成。

观点:

<% @projects.group_by(&:aasm_state).each do |state, projects| %>
  <div class="project-column small-order-<%= state_priority(state) %>">
  <div class="project-state spaced-out-2 project-<%= state %>"><%=  state.titleize %></div>

  <% for project in projects %>
    <%= render partial: 'auditions/partials/dash_project_audition_form', locals: {project: project} %>
  <% end %>
<% end %>

这是部分代码:

<button data-click="new-project-audition">+ Audition for <%= project.title %></button>
<%= form_for([project, @audition]) do |f| %>
... SNIP....
<% end %>

除了表格外,一切都有效。生成的每个表单都包含@projects 中最后一条记录的 ID。所以,例如最后一个项目是 ID 19,无论我点击哪个项目表单,它们都是 19。问题不在于部分,而在于我在form_for 中所做的事情,因为@部分内部的 987654325@ 生成正确的标题。

更新: 我重新启动了服务器,form_for 现在正在生成正确的路径和正确的 ID。

我在 form_for 循环中也有这一行,但它仍然是错误的。 &lt;h3 class="section-head"&gt;New Audition for &lt;%= project.title %&gt;&lt;/h3&gt;

它正在为整个循环中的最后一个项目生成标题。

更新 2:停止处理页面重新加载,所以...现在甚至不知道该说什么。

【问题讨论】:

  • 控制器中的@audition 设置是什么?
  • Audition.new -- 是否应该在循环中分配?
  • 我也尝试将其作为本地 audition: @audition 传递给局部

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

当你执行 form_for([project, @audition]) 时,它会为

生成一个表单

projects:project_id\auditions:audition_id

所以您在所有形式中看到的 id 都可能属于 @audition 变量。你在哪里初始化它?

理想情况下,它应该在每个项目的基础上进行初始化,对吧?让我知道这是否有任何帮助。

【讨论】:

  • 路径是 projects/project_id/audition -- 因为,试镜是新的,还没有 ID(我从 [project, audition] 开始,但尝试各种事情只是将实例变量直接传递给form_for 我上次迭代的助手。
  • &lt;form class="new_audition" id="new_audition" action="/projects/19/auditions" accept-charset="UTF-8" method="post"&gt;
  • 和试镜,把变量传给partial = project.auditions.new对吧?我的意思是,每个项目的范围对吗?
  • 我仔细看,ID 肯定是项目而不是 @audition -- 因为 project.title 在部分生成项目 19 的标题。另外,@audition 不应该需要只限于项目,因为它只是在初始化一个新的试镜,对吧?试镜是一个嵌套资源,所以 Rails 应该知道如何处理它。更改您建议的范围时出现错误。
  • 看来试镜变量可能是问题所在,对——我不应该在控制器中设置它以便为每个项目初始化循环吗?我不确定如何在控制器中执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
相关资源
最近更新 更多