Ruby on rails 为什么这个渲染:部分行迭代我的集合两次?
鉴于这些关系:Ruby on rails 为什么这个渲染:部分行迭代我的集合两次?,ruby-on-rails,forms,partial-views,Ruby On Rails,Forms,Partial Views,鉴于这些关系: class Account < ActiveRecord::Base has_many :employments has_many :people, :through => :employments accepts_nested_attributes_for :employments end class Employment < ActiveRecord::Base belongs_to :account belongs_To :perso
class Account < ActiveRecord::Base
has_many :employments
has_many :people, :through => :employments
accepts_nested_attributes_for :employments
end
class Employment < ActiveRecord::Base
belongs_to :account
belongs_To :person
end
有人能解释为什么会这样吗
以下是一些附加信息:
\u employment.html.erb
部分:
<div class="employment">
<span class="name"><%= link_to h(employment.person.name), person_path(employment.person) %></span>
<span class="role"><%=h employment.role %></span>
<span class="commands"><%= remove_child_link "Remove", f %></span>
</div>
本让我走对了方向。一些运行时检查显示记录存储在
对象
变量中(我已经知道了,但在不同的上下文中)。因此,我可以将子句的字段改写为:
<% form_for @account do |f| -%>
<% f.fields_for :employments do |e| -%>
<div class="employment">
<span class="name"><%= link_to h(e.object.person.name), person_path(e.object.person) %></span>
<span class="role"><%=h e.object.role %></span>
<span class="commands"><%= remove_child_link "Remove", e %></span>
</div>
<% end -%>
<% end -%>
它为employments模型中的每个字段呈现了部分内容,而您确实希望为每个雇用记录执行一次。也就是说,删除以下字段的迭代:
<% form_for @account do |f| -%>
<%= render :partial => 'employment', :collection => @account.employments %>
<% end -%>
‘就业’,:collection=>@account.employments%>
它为employments模型中的每个字段呈现了部分内容,而您确实希望为每个雇用记录执行一次。也就是说,删除以下字段的迭代:
<% form_for @account do |f| -%>
<%= render :partial => 'employment', :collection => @account.employments %>
<% end -%>
‘就业’,:collection=>@account.employments%>
您使用字段\u作为是正确的,但它将为每个工作呈现字段中的内容,因此从呈现:部分中删除:collection
参数。相反,通过将其放入帐户模型中来使用嵌套表单:
accepts_nested_attributes_for :employments
阅读有关嵌套表单的更多信息:您可以正确地为
使用字段,\u,但它将为每个工作
呈现其中的内容,因此请从呈现:部分
中删除:collection
参数。相反,通过将其放入帐户模型中来使用嵌套表单:
accepts_nested_attributes_for :employments
在此处阅读有关嵌套表单的更多信息:fields\u是否是迭代器?我想它只是更改了表单生成器的名称generation.fields\u是迭代器吗?我想它只是更改了表单生成器的名称生成。我已经在其中为
使用了接受嵌套属性,很抱歉,我忘了将其包含在示例中。但是,当我删除:collection
参数时,它会尝试在partial中计算nil.person
。如果不使用partial,它是否有效?只需将嵌套字段粘贴到
的
字段中即可?我不想只显示表单字段,而是想显示现有的雇佣记录,其中只有某些字段是可编辑的,尤其是删除字段。是否可以在
的字段\u中以普通html格式显示字段?我使用的是render:partial
,因为它为每条记录提供了一个局部变量。是的,您可以将输出粘贴到或任何地方。请发布此请求的部分和控制器操作。尝试此操作时,我得到了未定义的局部变量。如何访问属性?我已经在那里为
使用了接受嵌套属性,\u,很抱歉,我忘了在我的示例中包括它。但是,当我删除:collection
参数时,它会尝试在partial中计算nil.person
。如果不使用partial,它是否有效?只需将嵌套字段粘贴到
的
字段中即可?我不想只显示表单字段,而是想显示现有的雇佣记录,其中只有某些字段是可编辑的,尤其是删除字段。是否可以在
的字段\u中以普通html格式显示字段?我使用的是render:partial
,因为它为每条记录提供了一个局部变量。是的,您可以将输出粘贴到或任何地方。请发布此请求的部分和控制器操作。尝试此操作时,我得到了未定义的局部变量。如何访问属性?
accepts_nested_attributes_for :employments