Проблема Ассоциации Рельсов - PullRequest
1 голос
/ 20 марта 2010

У меня проблемы с этой ассоциацией.

Мне нужно получить массив праймериз, которые принадлежат солдатам во взводе. Итак, однажды я собрал всех солдат во взводе @company = Company.find_by_id (1) @platoons = @ company.platoons

<% @platoons.each do |p| %>
  <%= p.soldiers.primaries.find(:all,:conditions => ["relationship = ? AND contacted = ?", 'Spouse', 'Yes'])) %>
<% end %>

*** Так что нет никакого метода для основных цветов, я предполагаю, что это потому, что я пытаюсь вызвать ассоциацию в массиве. У солдат есть взвод_ид, но у праймериз нет, у них есть связь только с солдатами в этом взводе. Как мне это сделать? Мне нужно, чтобы вернуть массив праймериз. Заранее спасибо!

class Soldier < ActiveRecord::Base
  belongs_to :company
  belongs_to :platoon
  has_many :primaries, :dependent => :destroy
end


class Platoon < ActiveRecord::Base
  belongs_to :company
  belongs_to :battalion
  has_many :soldiers
end

class Primary < ActiveRecord::Base
  belongs_to :soldier
  belongs_to :company
end

1 Ответ

0 голосов
/ 20 марта 2010

Вы можете перебрать солдат:

<% @platoons.each do |platoon| %>
  <% p.soldiers.each do |soldier| %>
    <%= soldier.primaries.find(:all,:conditions => ["relationship = ? AND contacted = ?", 'Spouse', 'Yes'])) %>
   <% end %>
<% end %>

Это не оптимально и не элегантно. Лучшее решение было бы:

class Platoon < ActiveRecord::Base
  belongs_to :company
  belongs_to :battalion
  has_many :soldiers
  has_many :primaries, :through => :soldiers
end

Тогда ваш взгляд будет:

<% @platoons.each do |platoon| %>
  <%= platoon.primaries.find(:all,:conditions => ["relationship = ? AND contacted = ?", 'Spouse', 'Yes'])) %>
<% end %>
...