2011-10-18 70 views
0

我用Rails 3.1和Mongoid。將我的模型的字段保存爲小寫字母的正確方法是什麼?我在Mongoid文檔中沒有看到這一點,但我想知道是否有一種我應該知道的乾淨方式。非常感謝。Rails3中/ Mongoid - 保存模型爲小寫

回答

3

行,所以我閱讀文檔更徹底,這是我應該做開始。現在這對我有效。

在model.rb

... 
before_create :drop_the_case 

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

「drop_the_case」 是這個我自己的任意名稱。

謝謝。

1

在你的模型,你可以使用

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這應該工作!

1

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

您還可以將case_sensitive:false添加到唯一性驗證。例如: validates_uniqueness_of:foo,:case_sensitive => false –