我想扩展构建方法或创建另一个方法,该方法使用父项中的属性自动预填充子模型。
我现在每次都在控制器中这样做......
@event_log = @event.event_logs.build(
place_id: @event.place_id, quiz_master_id: @event.quiz_master_id,
start_at: Chronic.parse("#{params[:start_at]} #{@event.start_time}")
)
我想把这个逻辑移到模型中:
def self.auto_build
build(place_id: event.place_id, .....)
end
但是我收到了错误.. undefined method event
我不确定如何仅覆盖此模型的构建或创建类似的方法:
# File 'activerecord/lib/active_record/associations/builder/association.rb', line 11
def self.build(model, name, options)
new(model, name, options).build
end
答案 0 :(得分:2)
您可以使用关联扩展名:
has_many :event_logs do
def build(*args)
event_log = super
# do with event_log object whatever you want here
# you can access parent object with proxy_association.owner
event_log
end
答案 1 :(得分:1)
我不确定如何在子模型中完成此操作,但是从控制器中读取,您可以在父模型中执行此操作:
def build_event_log
event_logs.build(
place_id: place_id,
quiz_master_id: quiz_master_id
...
)
end
答案 2 :(得分:0)
也许你可以试试这样的:
要创建新方法或覆盖默认构建方法,请创建一个模块并将其放在config / initailzers中,
对于Ex:
# config/initializers/active_relation_helper.rb
module ActiveRelationHelper
def build(attribute_hash = {})
# Your content
end
ActiveRecord::Relation.send(:include, ActiveRelationHelper)
end