Направляющие: проверка измененных полей

Во-первых, я генерировал леса, названные 'объектом'

Я хотел бы проверить, какие поля объекта изменяются. и я попробовал две возможных попытки, это не работа tho.

Сначала попытайтесь!

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 %>

Сообщите мне, как решить эту проблему: (

13
задан Hongseok Yoon 3 February 2010 в 08:01
поделиться

1 ответ

Атрибуты, которые не были сохранены, будут реагировать на изменение ?

@item.title_changed? #=> true

Можно получить массив измененных атрибутов с помощью действия change

@item.changed #=> ['title'] 

Для выполнения действия #update необходимо использовать attributes= для изменения объекта, затем можно использовать changed и change? перед сохранением:

def update
  @item = Item.find(params[:id])
  @item.attributes = params[:item]
  @item.changed #=> ['title']
  ... do stuff
  @item.save
end
32
ответ дан 1 December 2019 в 20:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: