2012-06-18 29 views
9

我想知道update_attributes语句后哪些字段已经更新。我正在过滤可更新的参数,并删除那些我不想从params[:model]更新的参数。现在,一些新的可更新参数可能与旧参数具有相同的值,我想知道哪些参数已更新,哪些参数由于相同的值而被忽略。下面是一些代码:查找调用update_attributes后哪些字段已更新?

UPDATABLE_PARAMS = ["param1", "param2", "param3", "param4"] 
def update 
    @dr = DR.find(params[:id]) 
    authorize! :update, @dr #devise stuff 

    hnew = params[:dr] 
    hnew.delete_if {|k, v| !UPDATABLE_PARAMS.include?(k.to_s) } 

    if @dr.update_attributes(hnew) 
    @dr.update_attribute(:last_updated_by, current_user.email) 
    @dr.touch 
    end 

    render :update_result 
end 

这里的棘手的部分:

我想呈现JSON的@dr对象(但已设置),此外它的标准字段,我d想添加一个包含updated_params的嵌套对象。我可以发送hnew作为@hnew给我看,但如果我这样做,我会得到所有加工参数,不只是那些不同。

我怎样才能得到改变的参数?

+0

最佳做法是通过attr_accessible处理允许的质量分配参数,并使用:作为assign_attributes/update_attributes/new的选项。 –

+0

谢谢viktor。我正在使用attr_accessible,但仅限于新记录。更新有不同的可访问attrs取决于其他因素(如几个记录字段值) – Oktav

回答

36

保存模型时更改的属性的地图。

@dr.previous_changes() 
+0

这太可笑了。我知道必须有一个轨道的方式。谢谢。 – Oktav

+0

正确并且很高兴知道。我虚心地删除我的答案... –

相关问题