我创建了一个如下所示的模型:
class Parent < ActiveRecord::Base
attr_accessible :child, :child_id
has_one :child, :class_name => 'Child', :autosave => true, :inverse_of => :parent
#parent's validations
validates_associated :child
end
孩子模型就像:
class Child < ActiveRecord::Base
attr_accessible :parent, :parent_id
belongs_to :parent, :inverse_of => :child
validates_presence_of :parent
#Other custom validations...
end
当我在新孩子的页面时,如果用户没有为孩子选择之前创建的父母,我想强迫他在创建孩子的同时创建一个父母。 如果用户正确填写子项和父项的所有数据,它工作正常,但如果父项在给定字段上有任何验证问题,我得到的唯一消息是:“父项不能为空”
我想向用户展示如果他单独创建父母就会显示的相同消息。这应该是这样的:“父母的字段X太短”。
是否可以使用validates_associated或使用类似的帮助器?
提前致谢!
答案 0 :(得分:4)
回答我自己的问题.. 问题在于:
validates_associated :child
:自动保存和:inverse_of 选项已经完成了我想要的操作。 validates_associated是不必要的,正如我所读,已弃用。
:自动保存选项使父级在保存父级之前保存已关联的已加载子级。
使用:inverse_of 选项,它将保存子项,运行其验证,如果出现问题,则将子项的错误添加到父项,而不说“子项无效”
此外..我不使用 accepts_nested_attributes_for 。所以我将孩子和父母加载到父母的控制器上,然后保存了父母:
@parent = Parent.new(params[:parent])
@parent.build_child(params[:parent][:child])
if @parent.save
redirect_to(@parent ....etc.....
错误随着我想要闪现。
再见:)