gpt4 book ai didi

ruby-on-rails - 覆盖ApplicationRecord初始化,不好的主意吗?

转载 作者:行者123 更新时间:2023-12-04 13:37:11 25 4
gpt4 key购买 nike

我正在创建一个foo对象,如下所示:

@foo = Foo.new(foo_params)
@foo.bar = Bar.where(name: "baz").first_or_create

但是我还需要执行其他操作。因此,我想到了重写Foo initialize方法来执行以下操作:
class Foo < ApplicationRecord
def initialize(*args, BarName)
@foo = super
@foo.bar = Bar.where(name: BarName).first_or_create
end
end

并这样称呼它:
@foo = Foo.new(foo_params, "baz")

但是Foo是ApplicationRecord,似乎不建议重写ApplicationRecord的initialize方法。

那我该怎么办呢?还有其他想法吗?这个初始化的主要事情会起作用吗?

最佳答案

您可以为此使用active record callbacks。但是,您将无法指定bar_name,并且将需要以某种方式从Foo属性中动态找到它。

如果该选项对您有效。将类似以下代码的内容添加到模型中。

after_initialize :set_bar

# some other code

def set_bar
name = # dynamicly_find_name
self.bar = Bar.where(name: name).first_or_create
end

如果您确实需要指定 bar_name,我建议为其创建一个方法。
Foo.new(params).with_bar
def with_bar(bar_name)
self.bar = Bar.where(name: BarName).first_or_create
end

关于ruby-on-rails - 覆盖ApplicationRecord初始化,不好的主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41165520/

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