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

Antwort per Email an