在db中始终使字段为小写的简单方法

时间:2011-11-11 16:02:42

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

目前我在模型中执行以下操作:

before_save :to_lower
before_create :to_lower

def to_lower
  self.name = self.name.downcase
end

对我来说似乎很重复。

4 个答案:

答案 0 :(得分:15)

如果您已经有before_save,则不需要before_create。

before_save { |user| user.name = user.name.downcase }

答案 1 :(得分:3)

我通常通过以下方式处理此类案件:

def name= name
  super(name.try(:downcase))
end

答案 2 :(得分:1)

def name=(val)
  write_attribute(:name, val.downcase)
end

答案 3 :(得分:0)

你为什么要这样做?如果要执行不区分大小写的搜索,您可能只想将其放入查询逻辑中(实际上,我认为Rails已经做了一些)。但是,如果你真的希望在数据库中将数据规范化为小写(例如,如果你正在处理SHA1哈希或其他东西),那么你做的是正确的。