我有保存会话和活动的方法
def create_session
new_session = NewSession.new
new_session.transaction do
new_session.name = 'Somename'
....
new_session.save!
event = new_session.event #returning nil why?
puts event.new_session
end
end
我的NewSession
班级
class NewSession < ActiveRecord::Base
has_one :event, :class_name => SessionEvent, :dependent => :delete
after_create :create_event
def create_event
SessionEvent.create(:name => 'Eventname', :new_session => self)
end
end
现在如何在rails transaction
中使用after_create回调创建关联对象答案 0 :(得分:1)
尝试这样做:
class NewSession < ActiveRecord::Base
has_one :event
after_create :create_event
def create_event
self.event.create(:name => 'Eventname')
end
end
但请确保您的事件表中有'new_session_id',如果没有,则将其添加到事件表或在您的关联中定义foreign_key:
has_one :event, :foreign_key => "new_session"
现在使用您自己的型号代码。
修改强>
而不是将整个'self'保存在事件模型中,只需将'self.id'保存为:
def create_event
Event.create(:name => 'Eventname', :new_session => self.id)
end
按照我上面建议的那样定义你的配置 has_one:event,:foreign_key =&gt; “new_session”强>
希望这会对你有所帮助。
答案 1 :(得分:0)
确保您的事件表中有'new_session_id',然后
class NewSession < ActiveRecord::Base
has_one :event
after_create :create_event
def create_event
self.event.create(:name => 'Eventname')
end
end
答案 2 :(得分:0)
after_create() -
在Base.save之后调用尚未保存的新对象(不存在记录)。请注意,此回调仍包含在围绕保存的事务中。例如,如果此时调用外部索引器,则不会在数据库中看到更改。
所以我建议你使用 after_save 回调