2012-08-03 54 views
0

我的應用程序中的註冊表單允許用戶創建一個帳戶 - 它也創建他們的用戶記錄和accounts_users(has_many:through)記錄。一旦他們點擊提交,我打電話給'setup_account'方法爲用戶的新帳戶輸入幾個默認值。這就是說,該方法接近工作,但爲手動賦值的三個記錄輸入了不正確的值(即:user_id => @user或:account_id => @account)。 account_id和user_id的錯誤值總是爲1.有沒有人知道爲什麼這不起作用?Rails交易不輸入正確的數據

這裏是我的帳號模式:

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 [email protected]? 
     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_many:accounts_users; has_many:groups; has_many:members; has_many:roles_users)
  • 用戶(has_one:profile; has_many:accounts_users; has_many:accounts,:through =>:accounts_users; has_many:成員; has_many:groups; has_many:roles_users;的has_many:角色:通過=>:roles_users)
  • Accounts_User(belongs_to的:帳戶; belongs_to的:用戶)
  • 組(的has_many:成員爲:會員資格; belongs_to的:用戶; belongs_to的:帳戶)
  • 會員( belongs_to的:會員資格,多態=>真; belongs_to的:帳戶; belongs_to的:用戶)
  • 資料(belongs_to的:用戶)
  • 角色(的has_many:roles_users;的has_many:用戶:通過=>:roles_users;的has_many:賬戶, :through =>:roles_users)
  • RolesUser(belongs_to:user; belongs_to:account; belongs_to:role)

編輯:編輯setup_account方法並創建操作。

回答

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 

由於您使用的是事務塊,你就可以開始爲您打造他們儘快拯救的東西。如有任何錯誤,它會自動回滾。

+0

您的原始建議讓我走上了路,但這不是我需要的一切。經過一番搗鼓之後,我得到了它的工作。您可以在我上面編輯的文章中看到工作方法/操作。謝謝你的幫助。 – hugo 2012-08-03 15:11:51

+0

您可以再次編輯,以便在代碼語法中正確格式化該方法嗎? – 2012-08-03 15:25:22

+0

剛做了編輯。對於那個很抱歉。 – hugo 2012-08-03 15:39:39