Rails事务不输入正确的数据

时间:2012-08-03 00:23:34

标签: ruby-on-rails-3 transactions

我的应用程序中的注册表单允许用户创建帐户 - 它还会创建用户记录和accounts_users(has_many:through)记录。一旦他们点击提交,我就会调用'setup_account'方法为用户的新帐户输入几个默认值。话虽如此,该方法接近工作但是为我手动分配值的三个记录输入了不正确的值(即:user_id => @user或:account_id => @account)。 account_id和user_id的错误值总是最终为1.有没有人知道为什么这不起作用?

这是我的帐户模型:

  def self.setup_account(p)
    Account.transaction do
      @account = Account.new(p)
      @account.save!
      @user = @account.users.first
      @user.create_profile!
      @group = @account.groups.create!( :user_id => @user.id, :name => 'Default' )
      @group.members.create!( :account_id => @account.id, :user_id => @user.id )
      Role.all.each do |role|
        @account.roles_users.create!( :user_id => @user.id, :role_id => role.id )
      end
    end
    return @account
  end

这是我的AccountsController:

  def new
    @account = Account.new
    @user = @account.users.build()
    @account.accounts_users.build()
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @account }
    end
  end

  def create
    @account = Account.setup_account(params[:account])
    respond_to do |format|
      if !@account.nil?
        flash[:domain] = @account.subdomain
        format.html { redirect_to thanks_url }
        format.json { render json: @account, status: :created, location: @account }
      else
        format.html { render action: "new" }
        format.json { render json: @account.errors, status: :unprocessable_entity }
      end
    end
  end

我的模特协会是:

  • 帐户(has_many:users;:通过account_users; has_many:accounts_users; has_many:groups; has_many:members; has_many:roles_users)
  • 用户(has_one:个人资料; has_many:accounts_users; has_many:accounts,:through =&gt;:accounts_users; has_many:members; has_many:groups; has_many:roles_users; has_many:roles,:through =&gt;:roles_users)< / LI>
  • Accounts_User(belongs_to:account; belongs_to:user)
  • 组(has_many:members,as:membership; belongs_to:user; belongs_to:account)
  • 会员(belongs_to:membership,:polymorphic =&gt; true; belongs_to:account; belongs_to:user)
  • 个人资料(belongs_to:user)
  • 角色(has_many:roles_users; has_many:users:through =&gt;:roles_users; has_many:accounts,:through =&gt;:roles_users)
  • RolesUser(belongs_to:user; belongs_to:account; belongs_to:role)

编辑:编辑setup_account方法并创建操作。

1 个答案:

答案 0 :(得分:0)

在模型方法中查看我的评论,

def self.setup_account(p)
  Account.transaction do
    @account = Account.new(p)
    # Account is not created yet so @account.users won't be retrieved properly, I guess
    # You need to save account first.
    @user = @account.users.first
    @user.build_profile
    @group = @account.groups.build( :user_id => @user, :name => 'Default' ) #Error
    @group.members.build( :account_id => @account, :user_id => @user ) #Error
    Role.all.each do |role| #Error
      @account.roles_users.build( :user_id => @user, :role_id => role.id )
    end
    # Try moving this above my comment.
    @account.save!
  end
end

由于您正在使用事务块,因此您可以在构建事务块后立即开始保存。如果有任何错误,它将自动回滚。