在 Rails 模型中,如果我有一个用于专有名称的字段,那么尽管用户可能输入懒惰,但确保它们统一大写的最佳实践方法是什么?
IE 假设模型是 Contact
并且该字段是 Name
.无论用户输入什么,我都希望单词大写,即模型会将以下输入转换为以下输出:
john doe -> John Doe
j doe -> J Doe
John doe -> John Doe
john doe jr -> John Doe Jr
那么,您是否创建了一个
before_save
回调并使用正则表达式转换字段,或者您是否创建了某种验证,或不同的东西?我非常感谢强调理由的答案,为什么你会以一种或另一种方式这样做,因为这是我最坚持的。
最佳答案
你要的方法是titleize
. capitalize
方法只处理整个字符串中的第一个字符,所以 "john doe".capitalize #=> "John doe"
, "john doe".titleize #=> "John Doe"
.
至于如何实现,你可以用 before_save
,但我喜欢用伪属性对单个属性进行这些类型的简单准备。基本上,你定义了一个 writer
用于隐藏由 ActiveRecord
创建的默认属性的属性的方法.您仍然可以使用 write_attribute
访问该属性。方法 ( docs )。这样做将确保正确设置属性 一旦您分配它 ,这意味着即使在您保存它之前,您也可以确定您的对象处于有效状态:
class Contact < ActiveRecord::Base
def name=(s)
write_attribute(:name, s.to_s.titleize) # The to_s is in case you get nil/non-string
end
end
关于ruby-on-rails - rails : ensure capitalization in model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210493/