为了保持干燥,我有一个包含Mongoid文档的ModelBase类,如下所示:
class ModelBase
include Mongoid::Document
alias_attribute :guid, :id
def as_json(options = {})
azove_hash = options.merge(:methods => :guid)
super azove_hash
end
end然后我的所有模型都继承自ModelBase,它们看起来工作得很好。但是,有一个模型我使用了CarrierWave。当它从ModelBase继承时,对mount_uploader的调用将失败。当我在里面包含模型而没有子类化时,它工作得很好。不能在继承自另一个类的类中使用carrierwave吗?
下面是失败的类的版本。如果有任何建议/想法,我将不胜感激
require 'carrierwave/orm/mongoid'
class SomeOtherModel < ModelBase
field :abstract
validates :abstract, :presence => true
field :category
validates :category, :presence => true, :inclusion => {:in => %w{audio graphics text video}}
field :content_uri
validates :content_uri, :presence => true
has_and_belongs_to_many :topics
has_and_belongs_to_many :events
has_and_belongs_to_many :authors, :class_name => "User"
mount_uploader :content, ContentUploader
attr_accessible :abstract, :category, :content, :content_uri, :authors, :topics, :events
end发布于 2011-06-02 21:53:05
我觉得你把事情搞得太复杂了。我认为没有必要继承带有mongoid文档的modelbase。Mongoid本身不使用继承,只是根据需要包含模块。
因此,如果您有一组重复使用的字段,例如联系信息,只需执行以下操作:
class Customer
include Mongoid::Document
include DataModules::ContactDocument
mounts_uploader :logo, LogoUploader
end
class User
inclue Mongoid::Document
include DataModules::ContactDocument
end然后在/lib/data_modules/contact_document.rb中包含要重用的代码
module DataModules::ContactDocument
def self.included(receiver)
receiver.class_eval do
field :email, :type=>String
...
validates_existence_of :email
end
end
endhttps://stackoverflow.com/questions/6214384
复制相似问题