gpt4 book ai didi

ruby-on-rails - 是:on => :create valid for a before_save callback in Rails 3. 2.3

转载 作者:行者123 更新时间:2023-12-04 05:18:30 25 4
gpt4 key购买 nike

如您所知,before_save回调先于before_create回调执行。

因此,有人建议in最好使用before_save :method, :on => :create而不是before_create,以便相对于其他回调(例如自动保存回调)在适当的时间执行该回调方法。例如,参见this Pivotal Labs blog postthis StackOverflow answer

但是,据我所知,:on => :create选项无法在before_save回调上实现所需的效果。换句话说,无论是否保存,都会为每个保存执行回调。

不过,:on => :create选项对于before_validation回调确实有效。

有人可以确认:on => :create是否适用于before_save吗?它是否可以在以前的Rails版本中工作并且现在已损坏,或者前面提到的链接只是被误认为了?

假设:on => :create无效,可以接受以下内容,和/或有没有更好的方法?

before_save :callback_method, :if => :new_record?

谢谢你。

最佳答案

没错,:on回调没有before_save选项。
但是,我不明白,为什么要使用before_save而不是before_createbefore_create回调将在before_save之后立即调用。

当然,您可以使用before_save :callback_method, :if => :new_record?。但是我个人不喜欢这种解决方案-如果我需要在:if选项中添加条件怎么办?

如果有人在before_savebefore_create回调之间有依赖关系,我建议合并两个回调。例如(伪代码):

class MyModel < ActiveRecord::Base
before_create :prepare_x
before_save :do_something_with_x

def prepare_x
@x = 10
end


# will not work, because `prepare_x` called after `do_something_with_x`
def do_something_with_x
@a = 100 / @x
end
end

# ||
# ||
# \/

class MyModel < ActiveRecord::Base

before_save :do_something_with_x

def do_something_with_x
@x = 10 if new_record?
@a = 100 / @x
end
end

关于ruby-on-rails - 是:on => :create valid for a before_save callback in Rails 3. 2.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640221/

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