как хранить данные для использования в обратном вызове в модели ActiveRecord - PullRequest
0 голосов
/ 29 мая 2011

пользователь может назначить несколько предопределенных 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 записи, которая была только что сохранена в БД?

1 Ответ

0 голосов
/ 30 мая 2011

выглядит как строка с разрывом оператора печати, если для пользователя не определены user_events ... добавьте к нему оператор if, чтобы он работал ..

print "total new events:" + self.user_events.size   if user_events
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...