Rails3は常にすべてのモデルに対してvalidates_associated
を実行しますか?コメントが無効であるため、このActiveModel:関連するモデルが失敗した場合の検証の失敗を無効にする
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
def validate
errors.add_to_base("its always invalid")
end
end
のような単純な設定で
添付のコメントを持つ新しい投稿が失敗します。
a = Post.new
a.comments << Comment.new
a.errors
=> {:comments=>["is invalid"]}
validates_associated
が常に実行されている場合は、なぜそれが(?:message
を変更すること)があり、どのように私はそれをオフにしていますか?私はvalidates_associated :comments, :unless => proc{true}
を試しましたが、何もしません。
私は単純にモデルを保存して、関連するレコードがそれぞれ有効であればそれを保存しようとしますが、関連するモデルが無効な場合は失敗しません。
EDIT:これは私が
# t.string :name
class Game < ActiveRecord::Base
has_one :wikipedia_paragraph
has_one :ign_rating
def name=(_name)
ret = super
self.build_wikipedia_paragraph
self.build_ign_rating
ret
end
end
# t.text :paragraph
class WikipediaParagraph < ActiveRecord::Base
belongs_to :game
validates_presence_of :paragraph
def game=(_game)
ret = super
self.paragraph = Wikipedia.find(self.game.name)
ret
end
end
class IgnRating..
書籍、映画のようなゲームと同じ構造に従ってくださいより多くのモデルがありますがやろうとしているものに近いです。 WikipediaParagraph.paragraph == nil
の場合、ゲームは検証に失敗します。私はゲームが保存され、WikipediaParagraphがそうしなかったら好むだろうが、has_one :wikipedia_paragraph, :validate => false
は両方とも保存せず、保存も保存もしない。
私はすべてのhas_one/many
ため
self.build_wikipedia_paragraph
self.wikipedia_paragraph = nil unless self.wikipedia_paragraph.valid?
を使用するよりもエレガントな何かを期待していたが、今、私はそのおそらくことはできません実現しています。