gpt4 book ai didi

ruby-on-rails - Rails accepts_nested_attributes_for child 在验证时没有设置父级

转载 作者:行者123 更新时间:2023-12-04 02:44:39 24 4
gpt4 key购买 nike

验证时,我试图在我的子模型中访问我的父模型。我在 has_one 上发现了一些关于反向属性的信息,但我的 Rails 2.3.5 无法识别它,所以它一定从未进入发布版。我不确定这是否正是我需要的。

我想根据父属性有条件地验证 child 。我的父模型已经创建。如果在父级上 update_attributes 时尚未创建子级,则它无权访问父级。我想知道如何访问这个父级。应该很简单,像parent.build_child这样设置子模型的parent_id,为什么在为accepts_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

最佳答案

我在 Rails 3.2 中遇到了基本相同的问题。正如问题中所建议的,添加 inverse_of家长协会的选项为我修复了它。

应用于您的示例:

class Parent < AR
has_one :child, inverse_of: :parent
accepts_nested_attributes_for :child
end

class Child < AR
belongs_to :parent, inverse_of: :child
validates_presence_of :name, :if => :some_method

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

关于ruby-on-rails - Rails accepts_nested_attributes_for child 在验证时没有设置父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com