Activerecord回调修改关联模型

时间:2012-10-08 23:31:34

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有两个带关联的模型。我想在一个模型中设置一个before_save来修改另一个模型。这就是我所拥有的:

class Event < ActiveRecord::Base
  belongs_to :leads
end

class Lead < ActiveRecord::Base
  before_save  :update_event
  has_many :events, :dependent => :destroy
  accepts_nested_attributes_for :events, :reject_if => lambda { |a| a[:title].blank? }

  def update_event
    self.events.title = "Testing to set the event title"
  end
end

最终事件具有诸如标题之类的属性,这些属性将从系统内的各种模型关联设置。在上面的例子中,Leads就是其中之一。潜在客户将有一个可能事件的下拉列表,因此我希望在before_save中执行某些操作,而下拉列表中的选择最终会设置事件标题。如:

self.events.title = self.selected_event

我得到的错误如下:

undefined method `title=' for #<ActiveRecord::Relation:0x007fed3229d610>

我显然做错了。我会感激任何帮助。我仍在寻找解决方案,如果我弄明白的话,我会自己更新。

谢谢!

1 个答案:

答案 0 :(得分:2)

每个潜在客户都有多个事件。所以,在你的情况下,你想:

before_save  :update_events

def update_events
  events.each do |event|
    event.title = "Testing to set the event title"
  end
end