首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongoid和carrierwave

Mongoid和carrierwave
EN

Stack Overflow用户
提问于 2011-06-02 20:17:28
回答 1查看 1.3K关注 0票数 1

为了保持干燥,我有一个包含Mongoid文档的ModelBase类,如下所示:

代码语言:javascript
复制
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吗?

下面是失败的类的版本。如果有任何建议/想法,我将不胜感激

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2011-06-02 21:53:05

我觉得你把事情搞得太复杂了。我认为没有必要继承带有mongoid文档的modelbase。Mongoid本身不使用继承,只是根据需要包含模块。

因此,如果您有一组重复使用的字段,例如联系信息,只需执行以下操作:

代码语言:javascript
复制
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中包含要重用的代码

代码语言:javascript
复制
module DataModules::ContactDocument

  def self.included(receiver) 
    receiver.class_eval do
      field :email, :type=>String
      ...
      validates_existence_of :email
    end
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6214384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档