пользователь может назначить несколько предопределенных events
для room
, однако иногда они могут создавать новые events
на лету.
Я хочу захватить эти новые события и добавить их в отдельную таблицу userevent
Ниже мой подход. Я пытаюсь сохранить все события, которые не существуют, в :user_events
и затем вызвать add_new_events_to_userevents
на after_save.
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
записи, которая была только что сохранена в БД?