少し前に、投票可能なポリモーフィック アソシエーションに必要なメソッドとして機能する小さなモジュールを作成しました。もともとは ActiveRecord にのみ使用することを意図していましたが、今では mongo で使用したいと思います。mongoid を使用しているのでこのインスタンスで作成する必要がある関連付けのメソッドはすべて同じ名前であり、ここにあるものはすべて以前のコードを見てください。
# config/initializers/acts_as_votable.rb
module ActsAsVotable
end
module ActiveRecord
class Base
class << self
cattr_accessor :votable
def acts_as_votable
has_many :votes, :as => :voteable
end
def acts_as_voter
has_many :votes, :as => :voter
end
def votable?
method_defined? :votes
end
end
def votable?
self.class.send(:method_defined?, :votes)
end
end
end
そして、これがどのように使用されたかは次のとおりです。
class Recipe < ActiveRecord::Base
acts_as_votable
# more stuff...
end
ここで 2 つの問題に気付くでしょう。まず、私は を拡張しています。ActiveRecord::Baseから継承したモデルだけでなく、任意のモデルでこれを機能させるにはどうすればよいActiveRecordですか? 第二に、そのような空のモジュールが実際に必要ActsAsVotableですか? ここで何が間違っていますか?
そのすべてのコードをモジュールに入れるだけで、モデルActsAsVotableから呼び出すことができるのではないでしょうか?includes ActsAsVotable