Rails 4: цикл через ассоциацию
У меня возникли проблемы при зацикливании некоторых ассоциаций:
#=> 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])
Любая помощь будет с благодарностью. Заранее спасибо!
3 ответа
Согласно вашему коду нет нескольких экземпляров 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
вернет одну запись, так как это has_one
связь между member
а также academic
так что вы не можете зацикливаться на этом. Может быть, вы должны изменить свою ассоциацию на has_many :academics
и зациклить это как <% @member.academics.each do |academic| %>
Метод: каждый перебирает блок в соответствии с тем, как был построен этот Enumerable. Если блок не указан, возвращает себя. Enumerable представляет собой миксин, который предоставляет коллекциям некоторые полезные методы. В вашем примере academic
это не перечисляемый, но единственный объект. Вы должны использовать has_many
ассоциация.