Ren*_*ndy 7 ruby validation activerecord ruby-on-rails ruby-on-rails-4
我有一个活动模型.每个活动可以有多个会话.
我想确保没有模型可以存在,如果没有至少1个与之关联的会话.
validates :sessions, :length => { :minimum => 1 }
Run Code Online (Sandbox Code Playgroud)
问题是 - 当我尝试通过调用我的模型方法来创建特定事件的会话时:
create_sessions()
Run Code Online (Sandbox Code Playgroud)
这有点像:
sessions.create(event_id: id,date: x,day_of_the_week:x.strftime("%A"),classPin: pin)
Run Code Online (Sandbox Code Playgroud)
对于事件将运行的每个日期.
它无法保存错误:
ActiveRecord::RecordNotSaved in EventsController#create
You cannot call create unless the parent is saved
Run Code Online (Sandbox Code Playgroud)
当然 - 到目前为止还没有保存新的事件记录 - 因此,由于在保存父项之前创建一个不可用的关联,因此无法创建此关联!
因此,这种关系之间的任何验证如何工作 - 因为验证发生在保存时间......但我想在保存事件之前验证会话数将大于0!
我认为更简单的方法是创建事件和会话,new而不是create只创建对象而不将它们存储到数据库中。创建会议后,对save您的活动进行一次。
@event = event.new(event_args)
@event.sessions.new(session_args)
@event.save
Run Code Online (Sandbox Code Playgroud)
添加将存储该
对象和所有关联的对象。如果没有进一步配置,则仅保护新对象,请参阅Active Record Autosave Association了解更多信息。@event.save@eventsession