0

私は次のモデルを持っています:

class Song < ActiveRecord::Base

  belongs_to :albums

end

class Album < ActiveRecord::Base

  belongs_to :artist
  has_many :songs

end

class Artist < ActiveRecord::Base

  belongs_to :user
  has_many :albums

end

特定の曲がどのユーザーに属しているかを定期的に判断する必要があります。Songモデルにbelongs_to:user関係を追加するか、毎回song.album.artist.userを呼び出す方がよいですか?

4

1 に答える 1

1

デメテルの法則に違反しているようです。使用を検討してくださいdelegate

class Song < ActiveRecord::Base

  belongs_to :albums
  delegate :user, :to => :album

end

class Album < ActiveRecord::Base

  belongs_to :artist
  has_many :songs
  delegate :user, :to => :artist

end

class Artist < ActiveRecord::Base

  belongs_to :user
  has_many :albums

end

このメソッドを使用すると、song.user

ここでの追加の利点は、モデルの構造が変更された場合(おそらく変更されるでしょう)、呼び出しに依存するオブジェクトが壊れないSong#userように、再定義または他の何かに再委任できることです。song.user

資力

于 2012-10-14T17:50:25.393 に答える