Монгоид и несущая волна
Чтобы остаться СУХИМ, у меня есть класс ModelBase, который включает в себя Mongoid документ следующим образом:
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
1 ответ
Я думаю, ты делаешь вещи слишком сложными. Я не вижу необходимости наследовать от модельной базы с документом mongoid. Сам 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
end