Rails:检查已修改的字段

Hon*_*oon 13 ruby-on-rails

首先,我生成了名为'item'的脚手架

我想检查项目的哪些字段被修改.我尝试了两次可能的尝试,那些不起作用.

第一次尝试!

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
Run Code Online (Sandbox Code Playgroud)

第二次尝试!我寻找将数据从视图传递到控制器的方式,但我不能. 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 %>
Run Code Online (Sandbox Code Playgroud)

请让我知道如何解决这个问题:(

Ben*_*Ben 32

具有尚未保留的更改的属性将响应 changed?

@item.title_changed? #=> true
Run Code Online (Sandbox Code Playgroud)

您可以使用获取一系列已更改的属性 changed

@item.changed #=> ['title'] 
Run Code Online (Sandbox Code Playgroud)

对于您的#update操作,您需要使用attributes=更改对象,然后您可以使用changed和保持changed?之前:

def update
  @item = Item.find(params[:id])
  @item.attributes = params[:item]
  @item.changed #=> ['title']
  ... do stuff
  @item.save
end
Run Code Online (Sandbox Code Playgroud)