ruby on rails - Modifying an ActiveRecord module to work with any model -
so while ago created small module serve methods need votable polymorphic association, , while meant used activerecord want use mongo, , since i'm using mongoid of methods associations need create in intance have same names , everthing here take @ previous code:
# 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 and here how used:
class recipe < activerecord::base acts_as_votable # more stuff... end so you'll notice 2 issues here, firstly, i'm extending activerecord::base, how can make work model, not ones inherit activerecord?, secondly need empty module actsasvotable one? doing wrong here?
if put code module actsasvotable, shouldn't able call includes actsasvotable model?
first, put in initializer or in /lib sure path loaded in application.
module actsasvotable extend activesupport::concern module instancemethods def votable? self.class.send(:method_defined?, :votes) end end module classmethods 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 end then in model:
class user < activerecord::base include actsasvotable end finally:
user.methods.include?("acts_as_votable") # => true
Comments
Post a Comment