2010-03-20 7 views
1

J'ai des problèmes avec cette association.Rails Association Problème

J'ai besoin d'un tableau des primaires qui appartiennent aux soldats d'un peloton. Donc, une fois que je reçois tous les soldats dans un peloton: @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 %> 

*** Il n'y a donc pas de méthode pour les tumeurs primaires, je suppose que cela C'est parce que j'essaie d'appeler une association sur un tableau. Les soldats ont un peloton_id mais les primaires ne le font pas, ils ont seulement l'association avec les soldats de ce peloton. Comment puis-je faire cela? J'en ai besoin pour retourner un tableau de Primaires. Merci d'avance!

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 

Répondre

0

Vous pourriez créer une boucle par les soldats:

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

Ce n'est pas optimale ou élégant. Une meilleure solution serait:

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

alors votre point de vue serait:

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

Merci beaucoup, cette association de peloton aurait été vraiment évident pour moi. – looloobs

Questions connexes