Rails3 / Mongoid - сохранить модель в нижний регистр - PullRequest
0 голосов
/ 18 октября 2011

Я использую Rails 3.1 и Mongoid.Как правильно установить, что поле моей модели сохраняется в нижнем регистре?Я не вижу этого в документации Mongoid, но мне было интересно, есть ли чистый способ, о котором я должен знатьБольшое спасибо.

Ответы [ 3 ]

3 голосов
/ 19 октября 2011

Хорошо, поэтому я прочитал документацию более тщательно, что я должен был сделать изначально.И теперь это работает для меня.

в model.rb:

...
before_create :drop_the_case

protected
def drop_the_case
  self.MYMODELFIELD = self.MYMODELFIELD.downcase
end

"drop_the_case" - мое собственное произвольное имя для этого.

Спасибо.

1 голос
/ 14 апреля 2014

Принятый ответ с обратным вызовом before_create имеет некоторые большие проблемы, особенно если вы используете определенные ограничения, такие как validates_uniqueness_of.Если возможно, используйте обратный вызов before_validation.

class Safe
    include Mongoid::Document
    field :foo, type: String

    validates_uniqueness_of :foo

    before_validation :drop_the_case

    protected
    def drop_the_case
        self.foo = self.foo.downcase
    end
end

class Dangerous
    include Mongoid::Document
    field :foo, type: String

    validates_uniqueness_of :foo

    before_create :drop_the_case

    protected
    def drop_the_case
        self.foo = self.foo.downcase
    end
end

dangerous = Dangerous.create!(name: 'BAR')
safe = Safe.create!(name: 'BAR')

dangerous.update(name: 'BAR') # dangerous.name => BAR
safe.update(name: 'BAR') # safe.name => bar

Dangerous.create!(name: 'BAR') # => true, unique constraint ignored
Safe.create!(name: 'BAR') # throws exception
1 голос
/ 18 октября 2011

В вашей модели вы можете использовать

def before_save
  self.your_model_field = your_model_field.downcase
end

или

def before_save
    self.your_model_field.downcase!
end

Взгляните на http://www.ruby -forum.com / topic / 109091 Это должно работать !!

...