2010-11-28 25 views
3

考虑以下父/子关系,其中Parent是1..n与Kids(仅此处相关内容) ...作品如预期验证失败Rails3:嵌套模型 - child validates_with方法导致“NameError - 未初始化常量[parent] :: [child]”

class Parent < ActiveRecord::Base 

    # !EDIT! - was missing this require originally -- was the root cause! 
    require "Kid" 

    has_many :kids, :dependent => :destroy, :validate => true 
    accepts_nested_attributes_for :kids 

    validates_associated :kids 

end 

class Kid < ActiveRecord::Base 

    belongs_to :parent 

    # for simplicity, assume a single field: @item 
    validates_presence_of :item, :message => "is expected" 

end 

在儿童模型中的validates_presence_of方法,产生的每Item is expected提供的自定义消息属性的最终字符串。

但如果尝试validates_with,而不是...

class Kid < ActiveRecord::Base 

    belongs_to :parent 

    validates_with TrivialValidator 

end 

class TrivialValidator 

    def validate 
     if record.item != "good" 
     record.errors[:base] << "Bad item!" 
     end 
    end 

end 

... Rails的返回NameError - uninitialized constant Parent::Kid错误之后,不仅企图制造(初始持久化)的用户数据,而且当即便试图打造初始形式。从控制器相关位:

def new 
@parent = Parent.new 
@parent.kids.new # NameError, validates_* methods called within 
end 

def create 
@parent = Parent.new(params[:parent]) 
@parent.save # NameError, validates_* methods called within 
end 

错误表明,在型号名称(或许字段名?)分辨率的错误信息建设地方,事情已经发生冲突运行。但为什么会发生一些validates_*方法而不是其他方法?

其他人用这个撞墙了?为了完成这项工作,特别是关于型号名称,我在这里需要一些仪式吗?

回答

0

经过几个小时的路程,并返回新鲜 - 在Parent类缺少require "Kid"。将编辑。

+0

这对我来说看起来并不合适 - 你不应该需要另一个模型。 – 2010-11-29 02:25:45

相关问题