gpt4 book ai didi

ruby-on-rails - 为什么当属性更新为 nil 时不触发 before_save/after_save?以及如何触发?

转载 作者:行者123 更新时间:2023-12-04 06:29:14 26 4
gpt4 key购买 nike

更新:

好的。我有另一种方式来描述这一点。我正在保存一个项目,然后 Base.save调用此项目及其所有子项。并且由于其中一些不再是这些项目的 child ,因为我已取消选中它们,save不是对他们调用。听起来稍微清晰了一点。但这仍然是用另一个词描述的相同问题。为什么如果一条记录被更新(虽然有些奇怪)并且它的 parent_id 被改变了,rails 不会让它像更新一样?

================================================== ====================

我的项目与自己有多对一的关联。我想在项目更改其父项目时为项目创建评论。当 item.superitem_id 时一切正常从 nil 更改为某个 id,或从某个 id 更改为另一个 id。但是没有任何 react ,当 item.superitem_id从某个 id 更改为 nil。

在第一种情况下,日志显示:

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

和 Controller :
def update
params[:item][:subitem_ids] ||= []
@item = Item.find(params[:id])
@item.update_attributes(params[:item])
end

最佳答案

我的猜测是,在第二种情况下,您的关联已保存(即使它是同一张表),因此 rails 不会将其视为对“self”的更新。检查此帖子以使用“touch”强制回调belongs_to:

"Before Save" callback on associations

关于ruby-on-rails - 为什么当属性更新为 nil 时不触发 before_save/after_save?以及如何触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com