1

基本的な has_many :through 双方向の関係があります。

calendars have many calendar_calendar_events
calendars have many events through calendar_calendar_events


events have many calendar_calendar_events
events have many calendars through calendar_calendar_events

calendar_ids=has_many :through セットアップという基本的な関数を使用して、カレンダーをイベントに割り当てたいと思っていますが、この関数をオーバーライドして、いくつかの特別な魔法を追加したいと考えています。Rails のソースを調べましたが、この関数のコードが見つかりません。誰かが私にそれを指摘できるかどうか疑問に思っています。次に、このクラスをオーバーライドして、必要なものを追加します:)

4

3 に答える 3

2

少し探した後、私はそれを見つけました:

http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/collection_accessor_methods

思っていたのとは違ったので、見逃してしまったのかもしれません。calendar_ids= メソッドの代わりに calendars= メソッドをオーバーライドすることになり、すべてがうまく機能しました。

于 2009-07-15T11:09:36.863 に答える
0

上記の回答に応えて、alias_method_chain を使用してデフォルトのセッターをオーバーライドし、機能を追加しました。メソッドセッターを通常どおり使用するのではなく、送信する必要がある理由はわかりませんが、非常にうまく機能します。しかし、うまくいかないようだったので、これでうまくいきます:)

  def calendars_with_primary_calendar=(new_calendars)
    new_calendars << calendar unless new_record?
    send('calendars_without_primary_calendar=', new_calendars) # Not sure why we have to call it this way
  end

  alias_method_chain :calendars=, :primary_calendar
于 2009-07-15T23:23:08.797 に答える