我有一个模型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
,是否允许这些验证通过?
答案 0 :(得分:0)
也许只是不事先创建它?
@person.schedule = Schedule.new params[:schedule] if @person.scheduled?
所以@person和分配的时间表应同时保存 (交易)。
我认为这是唯一正确的方法。
更新(由于super:create conception):
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