2011-05-29 19 views
0

用戶可以將多個預定義的events分配給room但是,有時它們可​​能會在運行中創建新的events如何在ActiveRecord模型中存儲要在回調中使用的數據

我想捕捉這些新的事件,並將它們添加到一個單獨的表userevent

下面是我的做法。我試圖將after_save中不存在的所有事件保存到:user_events,然後回調add_new_events_to_userevents

after_save :add_new_events_to_userevents 
    attr_reader :event_tokens, :user_events 
    attr_accessible :user_events #not real column in table 
    attr_accessible :fulladdress, :title, :description, :cost, :email, :maximum_capacity, :phone, :user_id, :property_id 

    def add_new_events_to_userevents 
    print "total new events:" + self.user_events.size 
    self.user_events.each do |i| 
     u = Userevent.new 
     u.name = i 
     u.approved = false 
     u.room_id = self.id 
     u.user_id = self.user_id 
     u.save 
    end 
    end 

    def event_tokens=(ids) 
    events = ids.split(',') 
    allowed_events = [] 
    userevents = [] 
    events.each do |i| 
     i = i.strip 
     events = Event.select(:id).where("upper(name) = ?", i.upcase); 
     event = (events.blank? ? nil : events.first) 
     if event.present? 
     allowed_events << event[:id] 
     else 
     userevents << i 
     end 
    end 
    self.event_ids = allowed_events #these are events that exist 
    self.user_events = userevents #these are new events, need them in after_save 
    end 

我得到一個錯誤

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.size 
  • 我怎麼能存儲所有新用戶事件,然後在我的after_save回調使用它們?
  • after_save回撥如果我打電話self.idself.user_id會給我iduser_id剛剛保存到數據庫的記錄?

回答

0

看起來像打印語句斷行,如果你沒有一個用戶定義的user_events ... 添加一個if語句來它,使其工作..

print "total new events:" + self.user_events.size if user_events 
+0

好這將修復錯誤,但我仍然無法得到保存的user_events。 – Omnipresent 2011-05-30 20:47:40

+0

好吧,如果你得到關於一個零對象的錯誤,那意味着self.user_events是零。還有一些其他原因導致的_are_no_ user_events ...你可以仔細檢查一下你知道應該爲該用戶定義user_events的有效例子嗎? – Tilo 2011-05-30 21:27:58

+0

我檢查過了。我想知道我使用的技術(將'user_events'保存在'self'變量中,然後在'after_save'方法中使用該變量是最好的方法 – Omnipresent 2011-05-31 20:26:43

相關問題