2012-10-08 56 views
0

我有2個模型與關聯。我想在一個模型中設置before_save來修改另一個模型。以下是我有:Activerecord回調修改相關模型

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> 

我清楚這樣做不對。我會很感激任何幫助。我仍然在尋找一個解決方案,如果我弄明白的話,我會自己更新它。

謝謝!

回答

2

每個潛在客戶有多個事件。因此,在你的情況下,你想要:

before_save :update_events 

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

我該如何修改該代碼,以便它只改變當前事件。每個潛在顧客都有很多事件,而上面的代碼會更改所有事件的標題,而不是剛剛添加的新事件。 –

+0

好吧,我改變了代碼閱讀self.events.last.title =「測試設置事件標題」,這是爲我工作。除非你能想到一個更好的方式來做到這一點。 –