如何解决如何存储要在ActiveRecord模型中的回调中使用的数据
|| 用户可以将多个预定义的“ 0”分配给“ 1”,但是有时他们可能会动态创建新的“ 0”。 我想捕获这些新事件并将其添加到单独的表userevent
中
下面是我的方法。我试图将所有不存在的事件保存到:user_events
,然后在after_save上回调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,则显示print语句的行会中断。
向其中添加一个if语句以使其工作。
print \"total new events:\" + self.user_events.size if user_events
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。