Как преобразовать код "rails 2 + mongo_mapper" в код "rails 3 + mongoid"? Особенно функция "set_collection_name"? - PullRequest
0 голосов
/ 16 октября 2011

Код указан здесь :

Он закодирован в среде "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" для рельсов 3 и mongoid среды.Внутренние классы.

1 Ответ

1 голос
/ 16 октября 2011

Я полагаю, вы ищете store_in :posts или подобное.

http://mongoid.org/docs/documents.html

  # Macro for setting the collection name to store in.
  #
  # @example Store in a separate collection than the default.
  #   Model.store_in :population
  #
  # @example Store in a capped collection.
  #   Model.store_in :population, :capped => true, :max => 10000
  #
  # @param [ Symbol ] name The name of the collection.
  # @param [ Hash ] options The collection options.
  #
  # @option options [ true, false ] :capped If the collection is capped.
  # @option options [ Integer ] :size The capped collection size.
  # @option options [ Integer ] :max The maximum number of docs in the
  #   capped collection.
  def store_in(name, options = {})
    self.collection_name = name.to_s
    set_collection(options)
  end
...