从rails最佳实践的角度来看,在保存之前操作表单数据的最佳位置是什么? 对于instace,在联系表单上,我想确保所有数据都以大写形式保存(当你们在“请联系我”表单提交时,你们不讨厌人
对于instace,在联系表单上,我想确保所有数据都以大写形式保存(当你们在“请联系我”表单提交时,你们不讨厌人们吗?:-))
>在控制器中进行操作会更好吗?我可以在创建中执行此操作,或将其移动到某种私有方法中,这将在保存/更新之前将对象的所有字符串属性大写?
要么
>在模型before_save中做得更好吗?
我觉得它应该在模型中完成,因为我可能希望所有记录都相同,无论我是在rake任务中还是通过Web界面操作它们.
奖金:
如果我想在所有模型上使用它,并且能够根据具体情况覆盖默认值,我还会在哪里放置它?应用控制器?
可能存在一些特殊情况,您希望在没有大写的情况下节省价值 – 即不使用大写字母的品牌产品(即utorrent)或名称中应该有多个上限的姓氏(即爱尔兰和苏格兰名称如麦当劳)
谢谢!
最简单的地方就是你的模型.如果您认为更合适,我建议使用before_save或甚至before_validation.像这样的东西可以做到这一点:before_save :upcase_content def upcase_content self.content = self.content.upcase end
此外,如果您想要根据具体情况允许例外情况,可以在模型中添加attr_accessor.
class MyModel < ActiveRecord::Base attr_accessor :dont_upcase before_save :upcase_content, :unless => :dont_upcase ... end
然后在创建模型时将访问器设置为true
@model = Model.new(:brand_name => utorrent) @model.dont_upcase = true @model.save!