First, I've generated scaffold called 'item'
I'd like to check which fields of the item are modified. and I've tried two possible attempts, those're not work tho.
First Attempt!
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
Second Attempt! I looked for the way passing data from view to controller and I couldn't. 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 m开发者_开发技巧othod of item controller. But AGAIN NO
<% form_for(@item) do |f| %>
# omitted
<% end %>
Please let me know how to solve this problem :(
Attributes that have changes that have not been persisted will respond true to changed?
@item.title_changed? #=> true
You can get an array of changed attributes by using changed
@item.changed #=> ['title']
For your #update
action, you need to use attributes=
to change the object, then you can use changed
and changed?
before persisting:
def update
@item = Item.find(params[:id])
@item.attributes = params[:item]
@item.changed #=> ['title']
... do stuff
@item.save
end
精彩评论