在Rails中将模型更新为另一个模型

时间:2011-07-27 13:09:25

标签: ruby-on-rails model save

我有一个名为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}}

希望我会帮助你们中的一些人!

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