2012-06-18 27 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

正確並且很高興知道。我虛心地刪除我的答案... –

相關問題