13
首先,我已经生成了一个名为'item'的脚手架Rails:检查修改后的字段
我想检查该项目的哪些字段被修改。我已经尝试了两次可能的尝试,那些都不行。
第一次尝试!
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
第二次尝试! 我寻找将数据从视图传递给控制器的方式,而我无法。 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 %>
请让我知道如何解决这个问题:(
这是很酷,但在项目控制器的更新操作无法正常工作。怎么了? – 2010-02-03 08:48:17
我已经添加了一个示例更新方法。它不工作的原因是您从数据库中检索了@item,因此没有更改。然后,您需要使用提交表单中的参数对其进行更新,然后您可以获得“更改”状态,如果您愿意,可以坚持。 – Ben 2010-02-03 09:08:23
我认为上面的必须是Rails 3.在Rails 2中,你可以检查属性是否改变了,如:@ item.title_changed ?. (请参阅http://archives.ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects) – 2012-02-27 22:51:06