En primer lugar, he generado un andamio llamado 'artículo'Rieles: comprobación de campos modificados
Me gustaría comprobar qué campos del elemento se han modificado. y he intentado dos intentos posibles, esos no son de trabajo aunque.
¡Primer intento!
def edit
@item = Item.find(params[:id])
@item_before_update = @item.dup
end
def update
@item = Item.find(params[:id])
# compare @item_before_update and @item here, but @item_before_update is NIL !!!
end
Segundo intento! Busqué la manera de pasar los datos de la vista al controlador y no pude. edit.html.erb
<% @item_before_update = @item.dup %> # I thought @item_before_update can be read in update method of item controller. But NO.
<% params[:item_before_update] = @item.dup %> # And I also thought params[:item_before_update] can be read in update mothod of item controller. But AGAIN NO
<% form_for(@item) do |f| %>
# omitted
<% end %>
Por favor, hágamelo saber cómo resolver este problema :(
Esto es bueno, pero no funciona en la acción de actualización del controlador artículo. ¿Qué pasa? –
He agregado un ejemplo de método de actualización. La razón por la que no estaba funcionando es que recuperó @item de la base de datos, por lo que no se modificó. Luego debe actualizarlo con sus parámetros del formulario enviado, luego puede obtener el estado "modificado" y persistir si lo desea. – Ben
Creo que lo anterior debe ser Rails 3. En Rails 2, puede verificar si un atributo se cambió como: @ item.title_changed ?. (Consulte http://archives.ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects) –