gem を構築していて、その機能の一部を拡張したいのですが、そのActiveRecord::Associations::Builder::BelongsTo
方法がわかりません。
したがって、基本的にユーザーは次を指定できる必要があります。
class Event < ActiveRecord::Base
belongs_to :users, foo: true
end
誰もそれを行う方法を知っていますか??
これはうまくいきません:
module Mygem
module BelongsToFoo
def valid_options
super + [:foo]
end
#... other functionality
end
end
class ActiveRecord::Associations::Builder::BelongsTo
extend MyGem::BelongsToFoo
end
コンソール
ActiveRecord::Associations::Builder::BelongsTo.valid_options.include? :foo
#=> false ... :(
Event
ArgumentError: Unknown key: foo
================================================== =========================== アップデート
流れるデルウィンの答え私は自分のコードをもう一度見ようとしましたが、彼は正しいですが、それを含める必要がありActiveRecord::Associations::Builder::BelongsTo
ますが、変数valid_options
もあります。
だから私はできる
ActiveRecord::Associations::Builder::BelongsTo.new(:a, :b, :c).valid_options.include? :foo
# => true
だけでなく、
ActiveRecord::Associations::Builder::BelongsTo.valid_options.include? :foo
# => true
したがって、実際にはこのように見えるはずです
module MyGem
module BelongsToFoo
extend ActiveSupport::Concern
included do
self.valid_options += [:foo]
end
def valid_options
super + [:foo]
end
def define_callbacks(model, reflection)
# this wont get executed
add_foo_callbacks(model, reflection)# if options[:foo]
super
end
def add_foo_callbacks(model, reflection)
# therefore this wont either
end
end
end
これを試しても
module MyGem
module BelongsToFoo
def define_callbacks(model, reflection)
raise "dobugging"
end
end
end
Rails は私のメソッドのオーバーライドを完全に無視します。
はい、私は自分のオプションを定義できますが、何もしません:(何か提案はありますか?