3

親が子供と 1..n である次の親子関係を考えてみましょう (ここでは関連するもののみ)...

 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

Kid モデルの 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

NameError - uninitialized constant Parent::Kid...Rails は、ユーザー データの作成 (初期永続化) を試行した後だけでなく、初期フォームを構築しようとしたときにもエラーを返します。コントローラからの関連ビット:

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_*メソッドでは発生し、他のメソッドでは発生しないのでしょうか?

これで壁にぶち当たった人いますか?特にモデル名に関して、この作業を行うために省略した儀式が必要ですか?

4

1 に答える 1

0

数時間離れて、新鮮に戻った後-クラスrequire "Kid"で行方不明でした。Parent編集します。

于 2010-11-29T02:23:00.973 に答える