2016-03-02 63 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

如果答案解决了您的问题,您可以接受它。 –