39 votes

Rails: il y en a beaucoup avec l'association polymorphe - cela fonctionnera-t-il?

Un Person peut avoir de nombreux Events et chaque Event peut avoir un polymorphe Eventable record. Comment puis-je spécifier la relation entre l' Person et de la Eventable fiche?

Voici les modèles que j'ai:

class Event < ActiveRecord::Base
  belongs_to :person
  belongs_to :eventable, :polymorphic => true
end

class Meal < ActiveRecord::Base
  has_one :event, :as => eventable
end

class Workout < ActiveRecord::Base
  has_one :event, :as => eventable
end

La principale question concerne l' Person classe:

class Person < ActiveRecord::Base
  has_many :events
  has_many :eventables, :through => :events  # is this correct???
end

Dois-je dire has_many :eventables, :through => :events comme je l'ai fait ci-dessus?

Ou dois-je sort tous de la sorte:

has_many :meals, :through => :events
has_many :workouts, :through => :events

Si vous voyez un moyen plus facile d'accomplir ce que je suis après, je suis tout ouïe! :-)

69voto

Rob Sobers Points 5528

Tu dois faire:

 class Person < ActiveRecord::Base
  has_many :events
  has_many :meals, :through => :events, :source => :eventable,
    :source_type => "Meal"
  has_many :workouts, :through => :events, :source => :eventable,
    :source_type => "Workout"
end
 

Cela vous permettra de faire ceci:

 p = Person.find(1)

# get a person's meals
p.meals.each do |m|
  puts m
end

# get a person's workouts
p.workouts.each do |w|
  puts w
end

# get all types of events for the person
p.events.each do |e|
  puts e.eventable
end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X