私の関係にある<<
セッターをオーバーライドしたいと思います。例えば、与えられた:関係のアクティブレコードセッターをオーバーライドするレール
class Library < ActiveRecord::Base
has_many :groups
def readers
groups.find_by(name: 'readers').users
end
end
class Group < ActiveRecord::Base
has_many :group_memberships
has_many :users, through: :group_memberships
end
class GroupMembership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class User < ActiveRecord::Base
has_many :groups, through :group_membership
end
を私は
someLibrary.readers << user1
と、この後に起こるために、いくつかの追加のもののような何かをしたいです。
コードは次のようになります。
それがあるべきdef <<(objects)
super objects
#do other things here
end
を?私は次のように、Group
に推測:
class Group
...
def users<<(objects)
super objects
#do stuff
end
end
が、私は読者に<<
を呼び出すだとき、私はそれをやってみたいです。
グループユーザーの関係で<<
を呼び出しているかどうかを知る方法があるかどうか、またはグループユーザーに対して<<
メソッドを呼び出すときにグループオブジェクトにアクセスできるかどうかを知りたい。
いいですね。最も簡単な方法は、読者を設定する別のメソッドを定義することです(より明示的にする)が、activerecordまたはrubyで可能かどうかを知りたい。
編集:
うん、私はコアメソッドをオーバーライドすることは悪いことであり、人々はそのために地獄に行くことを知って、矢田矢田矢田。
私はちょうどそれが完了したのか興味があります。同様に、学習目的のために。
その目的は、特定の関係について<<
メソッドをオーバーライドするだけで、誰かがそれをやりたいと思うかもしれない理由を正当化する可能性があります。
あなたのバージョンの 'AR'では' someLibrary.readers.class'とは何ですか? – mudasobwa
IMHO Railsメソッドをオーバーライドするのはひどい考えです。なぜ実際に何を反映している名前で新しいメソッドを追加しないのですか? Railsのコアメソッドをオーバーライドすることで、何を達成しようとしていますか? – spickermann