Đầu tiên, tôi đã tạo giàn giáo được gọi là 'item'Đường ray: kiểm tra các trường đã sửa đổi
Tôi muốn kiểm tra xem các trường nào của mục được sửa đổi. và tôi đã thử hai lần cố gắng, đó không phải là việc làm.
Nỗ lực đầu tiên!
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
Nỗ lực thứ hai! Tôi đã tìm cách chuyển dữ liệu từ chế độ xem sang bộ điều khiển và tôi không thể. 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 %>
Xin vui lòng cho tôi biết làm thế nào để giải quyết vấn đề này :(
Đây là mát mẻ, nhưng không hoạt động trong bản cập nhật hoạt động của bộ điều khiển mục. Chuyện gì vậy? –
Tôi đã thêm phương pháp cập nhật mẫu. Lý do nó không hoạt động là bạn đã truy xuất @item từ cơ sở dữ liệu, do đó nó không bị thay đổi. Sau đó, bạn cần phải cập nhật nó với các thông số của bạn từ biểu mẫu đã gửi, sau đó bạn có thể nhận trạng thái 'đã thay đổi' và tiếp tục tồn tại nếu bạn muốn. – Ben
Tôi nghĩ rằng ở trên phải là Rails 3. Trong Rails 2, bạn có thể kiểm tra xem một thuộc tính đã được thay đổi như thế nào: @ item.title_changed ?. (Xem http://archives.ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects) –