所以前一段時間我創建了一個小模塊來充當我需要的可投票多態關聯的方法,雖然它最初僅用於ActiveRecord,但我現在想要與蒙戈使用它,因爲我使用mongoid一切,因爲我需要在這intance創建關聯的方法具有相同的名稱和寄託都在這裏看看我以前的代碼:修改ActiveRecord模塊以使用任何模型
# 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
所以你會注意到這裏有兩個問題,第一,我擴展了ActiveRecord::Base
,我怎樣才能讓這個工作適用於任何模型,而不僅僅是那些從ActiveRecord
繼承的模型?其次,我真的需要一個像ActsAsVotable
這樣的空模塊嗎?我在這裏做錯了什麼?
如果我只是把所有代碼放入模塊ActsAsVotable
,我不應該只能從我的模型中調用includes ActsAsVotable
?
我真的不明白你的問題。讓我們瞄準你的目標:你想如何使用它? – apneadiving
所以基本上我有一堆方法和關聯我想包含在模型中,如果它包含'acts_as_voter'或'acts_as_votable',你知道嗎?有點像這個插件:https://github.com/eMancu/acts_as_commentable/blob/master/lib/comment_methods.rb –