我正在创建一个foo像这样的对象:
@foo = Foo.new(foo_params)
@foo.bar = Bar.where(name: "baz").first_or_create
但我还需要其他对象来执行此操作。所以,我想到了重写Foo初始化方法执行如下操作:
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初始化方法。
那么我该怎么做呢?还有其他想法吗?这会初始化覆盖的东西吗?
您可以使用活动记录回调为了那个原因。但是,您将无法指定 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)