On Sunday 08 March 2009, Roman Sladeczek wrote: > Hallo Michael, > > hier mein Lösungsvorschlag: > > class Person < ActiveRecord::Base > has_many :films > has_many :roles, :through => :films, :uniq => true > end > > class Film < ActiveRecord::Base > belongs_to :person > belongs_to :role > end > > class Role < ActiveRecord::Base > has_many :films > has_many :people, :through => :films > end
Ja, das geht, meine Modellierung ist aber anders, das Role-Model hat keinen String, der die Art der Rolle bestimmt, sondern einen FK auf RoleType. Das genau ist die Schwierigkeit. class Role < ActiveRecord::Base belongs_to :person belongs_to :role_type belongs_to :movie validates_presence_of :person_id, :role_type_id, :movie_id end class RoleType < ActiveRecord::Base validates_presence_of :name end Mir ist vollkommen klar, dass ich mir für diesen Beispielfall die Modellierung so zurecht biegen könnte, dass es funktioniert. Das möchte ich nicht, weil das Ergebnis, um das es mir geht, nicht ein fertiges Produkt, sondern eine neue Erkenntnis ist. Ich möchte redundante Typ-Strings im Role-Model vermeiden und diese in ein weiteres Model, RoleType, herausziehen. Dadurch vermeide ich bei der DB-Modellierung Update- und Delete-Anomalien. Außerdem will ich keine IDs als Parameter für Bedingungen angeben. -- Ja, ich weiß natürlich, dass das starke Einschränkungen sind, ich will aber sehen, ob ich trotzdem mit AR das Ziel erreichen kann. Anders gesagt, ich möchte AR dazu bringen, SQL zu erzeugen, das etwa so aussieht: SELECT ... FROM people JOIN roles ON roles.person_id = people.id JOIN movies ON roles.movie_id = movies.id JOIN role_types ON roles.role_type_id = role_types.id WHERE role_types.name = 'Director' Michael -- Michael Schuerig mailto:[email protected] http://www.schuerig.de/michael/ _______________________________________________ rubyonrails-ug mailing list [email protected] http://mailman.headflash.com/listinfo/rubyonrails-ug
