私のモデルとその関連は次のとおりです。
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
validates :commenter, :presence => true
end
ケース1:以下のコードを試してみると、自動的にsaveメソッドが呼び出されます。
@post = Post.find(3)
@comments = @post.comments
p @comments #=> []
p @comments.class #=> Array
if @comments.empty?
3.times do
@comments << @post.comments.build
end
end
p @comments.first.errors #=>{:commenter=>["can't be blank"]}
ケース2:同じ空の配列を@commentsに手動で初期化すると、自動保存が呼び出されません。例えば、
p @comments #=> []
p @comments.class #=> Array
if @comments.empty?
@comments = []
p @comments #=> []
3.times do
@comments << @post.comments.build
end
end
p @comments.first.errors #=>{}
自動保存を回避するための最良の解決策は何ですか?上記のコードの動作が異なる理由を誰かに説明してください。