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_*
方法而不是其他方法?
其他人用这个撞墙了?为了完成这项工作,特别是关于型号名称,我在这里需要一些仪式吗?
这对我来说看起来并不合适 - 你不应该需要另一个模型。 – 2010-11-29 02:25:45