在创建期间在一个事务中向多个模型添加记录

时间:2012-07-31 12:25:38

标签: ruby-on-rails-3 transactions

我有以下新功能和创建操作。它们用于在多租户应用中创建新帐户。它工作正常,但即使作为一个新手我知道这是不正确的。这是我的问题,我如何使创建动作更薄,以便遵循最佳实践?而且,我如何才能使所有查询在一次交易中提交?

以下是我的方法:

  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.new(params[:account])
    respond_to do |format|
      if @account.save
         @user = User.find_by_email(params[:account][:users_attributes]["0"][:email])
        Profile.create(:user_id => @user.id)
        @group = @account.groups.create(:name => 'Default', :user_id => @user)
        @group.members.create(:account_id => @account, :user_id => @user)
        Role.all.each do |role|
          @user.roles_users.create(:role_id => role.id, :account_id => @account)
        end

        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:用户;:通过account_users)
  • 用户(has_one:个人资料)
  • Accounts_User(belongs_to:account; belongs_to:user)
  • 组(has_many:members,as:membership; belongs_to:user)
  • 会员(belongs_to:membership,:polymorphic => true)
  • 个人资料(belongs_to:user)
  • 角色(has_many:roles_users; has_many:users:through =>:roles_users; has_many:accounts,:through =>:roles_users)
  • RolesUser(belongs_to:user; belongs_to:account; belongs_to:role)

1 个答案:

答案 0 :(得分:0)

在我看来,在事务块中将create控制器中的所有语句分组将是一个好主意。查看ActiveRecord Transactions文档以了解有关它的更多信息。可以在Rails 3 ActiveRecord Transactions找到一个示例。