Ruby on rails 3 具有关系依赖关系的Rails事务

Ruby on rails 3 具有关系依赖关系的Rails事务,ruby-on-rails-3,exception,transactions,Ruby On Rails 3,Exception,Transactions,我在Rails 3中的事务处理方面遇到了一些问题。基本上我有两个模型项目和会员 @project = Project.new(params[:project]) @project.user = current_user membership = Membership.new membership.project = @project Project.transaction do begin @project.save! membership.save! rescue

我在Rails 3中的事务处理方面遇到了一些问题。基本上我有两个模型项目和会员

@project = Project.new(params[:project])
@project.user = current_user

membership = Membership.new
membership.project = @project

Project.transaction do
  begin
    @project.save!
    membership.save!
  rescue
    flash[:notice] = "There was an error creating your project."
  end
end
我正在创建一个新项目,并试图立即为该项目创建一个成员身份,该成员身份实际上也和a用户模型有关系,n:m

现在我启动一个事务来保存项目和事务中的成员资格。问题是我遇到了一个例外:

验证失败:项目不能为空

app/controllers/projects\u controller.rb:64:创建中的块中' app/controllers/projects\u controller.rb:61:increate'


第61行是Project.transaction do

好的,我自己想出来的。成员资格模型验证:project\u id的存在。在将项目保存到事务中之前,我正在设置Membership.project。之后,我试图保存成员身份,但由于项目是在数据库中创建之前设置的:project_id为nil

为了修复此代码,我必须按如下方式重新排列:

membership = Membership.new

Project.transaction do
  begin
    @project.save!
    membership.project = @project
    membership.save!
  rescue
    flash[:notice] = "There was an error creating your project."
  end
end

请注意,@project的分配现在是在项目保存并自动生成ID之后进行的。

显示您的项目和成员模型,包括它们之间的关系,以及相关的验证。出于兴趣,如果您验证:project,而不是:项目id?