0

我有一个模型 Person,如果它的类型是“计划的”,则需要一个计划。在它的控制器中(继承自InheritedResources::Base):

def create
  super do
    @person.schedule = Schedule.create params[:schedule] if @person.scheduled?
  end
end

问题是,我想验证所有“预定”类型的人都有一个时间表。像这样的东西:

validates :schedule, :presence => true, :if => :scheduled?

在 Person 模型中。但是因为调度belongs_to了一个人,所以它需要在创建自己之前创建人(所以这个人将有一个 ID)。因此,在我的控制器中,人员验证失败,因为需要稍后创建计划。

Rails 中有什么我不知道的东西可以让我执行这些验证吗?如果我使用accepts_nested_attributes_for,那会允许这些验证通过吗?

4

1 回答 1

0

也许只是不事先创建它?

@person.schedule = Schedule.new params[:schedule] if @person.scheduled?

因此@person 和分配的时间表应同时保存事务)。

我认为这是唯一正确的方法。


更新(由于超级:创建概念):

超级动作

def create(&block)
  ...
  yield @person if block_given?
  @person.save # line where @person get saved
end

继承动作

def create
  super do |person|
    person.schedule = Schedule.new params[:schedule] if person.scheduled?
  end
end
于 2012-12-30T07:16:37.057 回答