验证有很多关系的Rails至少有一个条目

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!

Joh*_*orn 3

我认为更简单的方法是创建事件和会话,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