2016-03-02 110 views
1

我正在創建一個應用程序,其中一個用戶成爲帳戶的account_manager。我想要做的是將其他用戶添加到該帳戶。用戶只能擁有一個帳戶,但帳戶可以擁有多個用戶。關聯多個現有記錄

class Account < ActiveRecord::Base 
    has_many :users 
    belongs_to :account_manager, :class_name => 'User', :foreign_key => 'account_manager_id' 
end 

class User < ActiveRecord::Base 
    has_one :account 

什麼我完全陷入上有一個地方,客戶經理可以在他們的名字從下拉用戶,類型,或使用一些其他類型的選擇。如果我嘗試在控制檯中執行此操作,我添加的每個新用戶都會替換最後一個而不是添加到它。這裏是我的帳戶架構:

create_table "accounts", force: :cascade do |t| 
    t.integer "user_id" 
    t.integer "account_manager_id" 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
    end 

我用collection_select嘗試,但我認爲這是僅適用於:雖然關聯。我也想我可能需要一個連接表,但我不知道如何設置它。最讓我惱火的是我不會創建新對象,我只想將現有用戶添加到現有帳戶。我只是在找一個能夠跟我說話的人。

回答

1

在你User型號:

class User < ActiveRecord::Base 
    belongs_to :account 
end 

雖然你的問題,你正在寫has_one。您不能在一個模型中編寫has_many,在其他模型中編寫has_one。在一個模型中需要有belongs_to

編輯:

belongs_to,始終保存在其表的外鍵的模式。所以users會在其中保存account_id。爲了獲得帳戶的所有用戶,您只需執行以下操作:

Account.first.users # As an account `has_many` users 
+0

謝謝!我是否還需要一個連接表來將用戶添加到帳戶? – railsie

+0

如果您的帳戶擁有多個用戶,且用戶所屬的帳號不止一個,則需要一個連接表。但在你的情況下,用戶只能屬於一個帳戶,所以你不需要它。 –

+0

如果答案解決了您的問題,您可以接受它。 –

相關問題