2

我创建了一个看起来像这样的模型:

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 或一些类似的助手?

提前致谢!

4

1 回答 1

4

回答我自己的问题..问题在于:

validates_associated :child

: autosave:inverse_of选项已经做了我想要的。validates_associated 是不必要的,并且正如我所读到的,已弃用。

:autosave选项使父级在保存父级之前保存已加载的关联子级。

使用:inverse_of选项,它将保存子节点,运行其验证,如果出现问题,将子节点的错误添加到父节点而不说“子节点无效”

另外..我没有使用accept_nested_attributes_for 。所以我在父母的控制器上加载了孩子和父母,然后保存了父母:

@parent = Parent.new(params[:parent])
@parent.build_child(params[:parent][:child])

if @parent.save
    redirect_to(@parent ....etc.....

错误如我所愿闪烁。

再见 :)

于 2013-08-07T13:36:21.763 回答