更新:當屬性更新爲nil時,爲什麼before_save/after_save沒有被觸發?以及如何觸發它?
好的。我有另一種方式來描述這一點。我正在保存一個項目,並且Base.save
被稱爲此項目及其所有子項目。而且由於其中一些不再是這個項目的孩子,因爲我沒有選中它們,所以save
沒有被調用。這聽起來有點清楚。但仍然用另一個詞來描述同樣的問題。爲什麼如果一條記錄被更新(雖然有些奇怪的方式),並且它的parent_id被更改了,但是rails不會使它成爲更新嗎?
============================================== ========================
我的項目與自己有多對一的關聯。我想在項目更改其父項時爲項目創建註釋。當item.superitem_id
從零變爲某個ID或從某個ID變爲另一個ID時,一切正常。但是,當item.superitem_id
從某個id變爲零時什麼也沒有發生。
在第一種情況日誌顯示:
UPDATE "items" SET "superitem_id" = 3, "updated_at" = '2011-04-12 23:07:05.566609' WHERE "items"."id" = 5
而在第二個:
UPDATE "items" SET "superitem_id" = NULL WHERE "items"."superitem_id" = 3 AND "items"."id"
大二項目肯定是改變了。但是爲什麼它沒有更新並且before_save沒有被調用?
型號:
class Item < ActiveRecord::Base
before_save :generate_comments
has_many :subitems, :class_name => "Item", :foreign_key => "superitem_id"
belongs_to :superitem, :class_name => "Item"
private
def generate_comments
@comment = self.comments.build(:content => "Test: #{self.superitem_id}")
@comment.save
end
end
查看與複選框從 「HABTM複選框」 railscast:
<% for subitem in @potential_subitems %>
<%= check_box_tag "item[subitem_ids][]", subitem.id, @item.subitems.include?(subitem) %>
<% end %>
和控制器:
def update
params[:item][:subitem_ids] ||= []
@item = Item.find(params[:id])
@item.update_attributes(params[:item])
end
是它解決了嗎? – charlysisto 2011-10-12 20:33:39
對於Rails 4及以下版本,您的回調必須在Rails 5中返回'true' ...,如果您的回調失敗,則必須明確引發異常,因此回調鏈會中止。 – 2017-06-30 12:54:59