所以我有一个编辑页面上有可编辑字段的对接...简单更新...
@patient.update_attributes(params[:patient])
......一切都很棒,除了....
我在这20个中有一个字段,我需要在它准备好db之前稍微调整一下,看起来我或者需要做
两次旅行
@patient.update_attributes(params[:patient])
@patient.update_attribute( :field=>'blah')
或单独设置它们
patient.update_attributes(:field1=>'asdf', :field2=>'sdfg',:field3=>'dfgh', etc...)
我错过了这样做的方法吗?
答案 0 :(得分:4)
调整所需的属性是什么?有两种方法可以做到这一点:
在将params发送到update_attribute方法之前按下params:
如果您想强调其中一个值,我只是在这里给出一个例子:
params[:patient][:my_tweak_attribute].gsub!(" ", "_")
@patient.update_attributes(params[:patient])
然后在模型中的before_save或before_update回调中进行调整的首选方法是:
class Patient < ActiveRecord::Base
before_update :fix_my_tweak_attribute, :if => :my_tweak_attribute_changed?
protected
def fix_my_tweak_attribute
self.my_tweak_attribute.gsub!(" ", "_")
end
end
这可以让你的控制器清理掉它可能并不真正需要的代码。
如果您只需要添加一个未通过表单发送的新参数,您可以在控制器中执行此操作:
params[:patient][:updated_by_id] = current_user.id
@patient.update_attributes(params[:patient])
假设current_user
已在某处定义(再次,只是一个例子)
答案 1 :(得分:2)
您可以为该字段创建虚拟属性。说该字段是:名称。您可以在Patient模型中创建一个函数,如:
def name
self[:name] = self[:name] * 2
end
当然,你在那个函数中做你的事情:)自己[:name]的Instaed,你也可以使用read_attribute(:name)。