2

2 つのモデルがあるとします。

class User < ActiveRecord::Base
  has_one :blog
end

class Blog < ActiveRecord::Base
  belongs_to :user

  validates_presence_of :user
  validates_uniqueness_of :user_id
end

ブログを持っているユーザーが 1 人いるとします。なんらかの理由で、同じユーザーを呼び出すふりをしましょうcreate_blog(ユーザーは既にブログを持っているため、オプションではないことはわかっています)。このブログが検証に合格せず、合格しない場合、保存されないだけでなく、ユーザーが持っていた以前のブログが削除されます。

なぜこうなった?最初のブログが削除されるのはなぜですか? この動作は予期されたものですか、それとも何か不足していますか?

4

1 に答える 1

1

呼び出すcreate_blogことで、Rails に以前のブログを破棄するように指示することになります。このようなことをしないでこれを回避する方法はありません(私が知っていることです):

blog = Blog.new(params[:blog])
if blog.valid?
  user.blog = blog
  user.save
end
于 2012-10-30T21:12:42.787 に答える