我有一个名为Details
的模型,其中包含一个方法,该方法使用另一个模型(Summary
)属性通过计算更新某些属性。我将该方法调用before_save
以使Details
'属性在我修改条目时自动更新。当我修改Details
模型中的条目时,我想更新Summary
'attributs。我正在搜索的内容可以像这样使用:
def update
@summary = Summary.find(params[:id])
if @summary.update_attributes(params[:summary])
(Details.update_all_attributes)
flash[:notice] = "Updated!"
redirect_to edit_summary_path(@summary)
else
render :action => 'edit'
end
end
见行:Details.update_all_attributes
。由于Details
我放了before_save
,我的所有def update
@summary = Summary.find(params[:id])
if @summary.update_attributes(params[:summary])
@details = Details.all
@details.each do |detail|
detail.save!
end
flash[:notice] = "Updated!"
redirect_to edit_summary_path(@summary)
else
render :action => 'edit'
end
end
'属性都会被保存并重新计算。我怎样才能做到这一点 ?感谢。
编辑:
我刚刚找到答案。我做了一个保存所有条目的循环。
{{1}}
希望我会帮助你们中的一些人!
答案 0 :(得分:2)
胖模特,瘦瘦的控制者:
模型
class Summary < ActiveRecord::Base
after_update :recalculate_details
private
def recalculate_details
Detail.all.each {|d| d.save! }
end
end
控制器
def update
@summary = Summary.find(params[:id])
if @summary.update_attributes(params[:summary])
flash[:notice] = "Updated!"
redirect_to edit_summary_path(@summary)
else
render :action => 'edit'
end
end