2

ビルド メソッドを拡張するか、子モデルに親モデルの属性を自動的に事前設定する別のメソッドを作成したいと考えています。

現在、毎回コントローラーでこれを行っています...

@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
4

3 に答える 3

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 
于 2013-10-10T14:57:35.517 に答える
1

子モデルでこれを達成する方法はわかりませんが、コントローラーから読み取ると、親モデルでこれを実行できます。

def build_event_log
  event_logs.build(
    place_id: place_id, 
    quiz_master_id: quiz_master_id
    ...
  )
end
于 2013-10-10T13:24:58.977 に答える