10

update_attributes ステートメントの後に更新されたフィールドを知りたいです。更新可能なパラメーターをフィルター処理し、更新したくないパラメーターを から削除していparams[:model]ます。さて、新しい更新可能なパラメーターのいくつかは古いものと同じ値を持つ可能性があり、同じ値のためにどのパラメーターが更新され、どのパラメーターがスキップされたかを知りたいです。コードの一部を次に示します。

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

トリッキーな部分は次のとおりです。

@drオブジェクトを JSON でレンダリングしたいと思います (ただし、それは既に設定されています) updated_params。その標準フィールドに加えて、.. hnew私は自分の意見をそのまま送信することもできます@hnewが、そうすると、異なるものだけでなく、処理されたすべてのパラメーターを取得できます。

変更されたパラメーターを取得するにはどうすればよいですか?

4

1 に答える 1

39

モデルの保存時に変更された属性のマップ。

@dr.previous_changes() 
于 2012-06-18T11:58:09.087 に答える