Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么这个渲染:部分行迭代我的集合两次?_Ruby On Rails_Forms_Partial Views - Fatal编程技术网

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