Rails 4:通过关联循环

Rails 4: Looping through association

我在循环一些关联时遇到了一些问题:

#=> member.rb
has_one :academic

#=> academic.rb
belongs_to :member

到目前为止一切顺利。但是,当我遍历关联时,我得到:

undefined method 'each' for #<Academic:0x007fc98b2b7210>

这是我的观点(显示):

<% if !@member.academic.nil? %>
 <% fields_academic = [:major, :second_major, :minor, :second_minor] %>

  <h1>Academics</h1>

  <% @member.academic.each do |academic| %>
 <%= render 'database/shared/display', model_obj: academic, data: academic, fields: fields_academic %>
  <% end %>
<% end %>

代码卡在 each 方法处。

@member 定义为 = Member.find(params[:id])

我们将不胜感激任何帮助。提前致谢!

根据您的代码,没有多个 academic 实例与给定的 member 相关(它是使用 has_one 关系定义的)。

答案是:不能循环。

您的视图的正确代码应该是:

<% if @member.academic.present? %>
 <% fields_academic = [:major, :second_major, :minor, :second_minor] %>
  <h1>Academics</h1>
  <%= render 'database/shared/display', model_obj: @memeber.academic, data: academic, fields: fields_academic %>
 <% end %>
<% end %>

如果您的目的是让一位会员拥有许多学者,请改用 has_many

class Member
  has_many :academics
end

each 应该用于 记录集合 (我的意思是这会产生多个记录)。目前 @member.academic 将 return 一个 单条记录 因为它是 [=13= 之间的 has_one 关系] 和 academic,所以你不能用它循环。也许你应该将你的关联更改为 has_many :academics 并像 <% @member.academics.each do |academic| %>

一样循环

方法 :each 根据此 Enumerable 的构造方式遍历块。如果没有给出块,returns self. Enumerable 是一个 mixin,它为集合提供了一些有用的方法。在您的示例中 academic 不是可枚举的,而是单个对象。你应该使用 has_many 关联。