我在Rails 3.2应用程序中。当管理员用户通过CRUD更改它们时,我希望将名为Candidate的模型中的某些字段保存到更新模型中(通过标准Rails脚手架方式的update_attributes调用)。
我在Candidate模型中有代码跟踪before_save过滤器中的变化:
before_save :check_changed
def check_changed
period_contributions_changed?
end
这是在候选模型文件candidate.rb里面。
我想要的是在period_contributions和其他指定字段中更改值以触发创建另一条记录Update。
更新将包含候选ID,更改字段的名称,前一个值和新值。
这似乎需要在Update控制器上调用一个方法的模型代码,这似乎是不好的做法。这样做有最好的做法吗?
答案 0 :(得分:0)
ActiveRecord
提供了一些可以使用
changed?
- >告诉你id对象被更改changed
- >给出一组已更改的属性 changed_attributes
- >为您提供一个散列,其中键为已更改的属性,值为旧值
before_save :log_changed
def log_changed
if self.changed?
self.changed.each do |attr|
Update.create(:candidate_id => self.id, :field => attr,
:new_value => self.attributes[attr], :old_value => self.changed_attributes[attr])
end
end
end