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.id
和self.user_id
會給我id
和user_id
剛剛保存到數據庫的記錄?
好這將修復錯誤,但我仍然無法得到保存的user_events。 – Omnipresent 2011-05-30 20:47:40
好吧,如果你得到關於一個零對象的錯誤,那意味着self.user_events是零。還有一些其他原因導致的_are_no_ user_events ...你可以仔細檢查一下你知道應該爲該用戶定義user_events的有效例子嗎? – Tilo 2011-05-30 21:27:58
我檢查過了。我想知道我使用的技術(將'user_events'保存在'self'變量中,然後在'after_save'方法中使用該變量是最好的方法 – Omnipresent 2011-05-31 20:26:43