【发布时间】:2011-10-16 01:17:03
【问题描述】:
这里列出了代码:
它是在“rails 2 + mongo_mapper”环境中编码的,现在我想将它转换为“rails 3 + mongoid”。没有报告“set_collection_name”的方法名称。
def klass
@klass ||= user_klass
end
def user_klass
klass ||= Class.new
klass.send(:include, Mongoid::Document)
// is it correct for mongoid
klass.set_collection_name(self._id.to_s)
klass.field "created_at", DateTime
klass.class_eval <<-METHOD
def id
self._id.to_s
end
def persisted?
!new_record?
end
METHOD
klass.instance_eval <<-NAME
def name
'Row'
end
NAME
self.questions.each do |question|
klass.field "q#{question.id}", String
klass.validates_presence_of "q#{question.id}".to_sym, :message => I18n.t('activemodel.errors.messages.blank') if question.required
klass.validates_uniqueness_of "q#{question.id}".to_sym, :message => I18n.t('activemodel.errors.messages.taken') if question.unique
if question.input == 'check' || question.input == 'radio'
klass.class_eval <<-METHOD
alias_method :old_q#{question.id}=, :q#{question.id}=
def q#{question.id}=(choices)
if !choices.is_a?(Array)
self.old_q#{question.id}= choices
return
end
if choices.include?('_other')
choices.delete('_other')
other_options = choices.detect {|c| c.is_a?(Hash)}
choices << other_options['other']
end
choices.reject! {|c| c.is_a?(Hash) || c.blank?}
self.old_q#{question.id}= choices.join("\n")
end
METHOD
end
end
klass
end
函数“send”和“set_collection_name”是否适用于 rails 3 和 mongoid 环境。内部类。
【问题讨论】:
标签: ruby-on-rails mongoid mongomapper