关联多个现有记录

时间:2016-03-02 07:30:33

标签: ruby-on-rails associations

我正在创建一个应用程序,其中一个用户成为帐户的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 个答案:

答案 0 :(得分: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