【发布时间】:2011-01-14 16:00:18
【问题描述】:
我在验证时尝试在我的子模型中访问我的父模型。我在 has_one 上发现了一些关于逆属性的信息,但我的 Rails 2.3.5 无法识别它,因此它一定从未进入发行版。我不确定这是否正是我需要的。
我想根据父属性有条件地验证孩子。我的父模型已经创建。如果在我对父级进行 update_attributes 时尚未创建子级,则它无权访问父级。我想知道如何访问该父级。 应该很简单,类似 parent.build_child 设置子模型的 parent_id,为什么在为接受嵌套属性构建子模型时不这样做?
例如:
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 activerecord relationships