ruby-on-rails – Rails accepted_nested_attributes_for验证时,孩子没有父集

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails accepted_nested_attributes_for验证时,孩子没有父集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
验证时,我试图访问我的子模型中的父模型.我在has_one上发现了一个关于反向属性的东西,但是我的Rails 2.3.5不能识别它,所以它一直没有被发布.我不知道这是否正是我需要的.

我想基于父属性有条件地验证孩子.我的父模型已经创建.如果在父级更新_属性时尚未创建该子项,那么该父对象无法访问.我想知道我如何访问这个父母.这应该很容易,像parent.build_child这样的东西设置子模型的parent_id,为什么在为child_nested_attributes_for构建孩子时不会这样做?

例如:

class Parent < AR
  has_one :child
  accepts_nested_attributes_for :child
end
class Child < AR
  belongs_to :parent
  validates_presence_of :name,:if => :some_method

  def some_method
    return self.parent.some_condition   # => undefined method `some_condition' for nil:NilClass
  end
end

我的表格是标准的:

<% form_for @parent do |f| %>
  <% f.fields_for :child do |c| %>
    <%= c.name %>
  <% end %>
<% end %>

使用更新方法

def update
  @parent = Parent.find(params[:id])
  @parent.update_attributes(params[:parent])   # => this is where my child validations take place
end

解决方法

我有一个类似的问题: Ruby on Rails – nested attributes: How do I access the parent model from child model

这是我最终解决的问题通过设置父回调

class Parent < AR
  has_one :child,:before_add => :set_nest
  accepts_nested_attributes_for :child

private
  def set_nest(child)
    child.parent ||= self
  end
end

猜你在找的Ruby相关文章