Rails 通过检索关联对象

Rails retrieve associated object through

我正在寻找解决以下问题的正确语法。我有 3 个模型:用户、客户、帐户

class Account
belongs_to  :client
belongs_to :user
end

class User
has_many :clients
has_many :accounts, through: :clients
end

class Client
belongs_to :user
has_many :accounts

我想创建一个控制器来通过客户端模型检索用户的所有帐户。我尝试了以下(第 1 行):

client = current_user.clients

检索属于 'User' 的所有 'Clients'(我在控制台中检查过)。但是,我未能找到下一行的正确语法来检索与 'Clients' 关联的所有 'Accounts'。我试过了(第 2 行)

@accounts = client.accounts

但我收到错误 'Undefined method "accounts"'。你能给我正确的语法吗?谢谢

如果您有这样的模型:

class User < ActiveRecord::Base
  has_many :clients
  has_many :accounts, through: :clients
end

class Client < ActiveRecord::Base
  belongs_to :user
  has_many :accounts
end

class Account < ActiveRecord::Base
  belongs_to  :client
  belongs_to :user
end

创建了一个用户、该用户拥有的一个客户以及该客户拥有的多个帐户后,我可以使用

获取这些帐户
    User.first.clients.select('*').joins(:accounts).to_a

使 Client 成为实际的 "join model" 可能更容易,但在某些方面,这种松耦合似乎更易于管理。

您的 'client' 是许多客户的数组。

首先,将 client 更改为 clients 以使该事实更加明确。

clients = current_user.clients

您不能在数组上调用帐户方法,这就是您的方法失败的原因。相反,您需要遍历数组,依次在每个客户端上调用您的方法帐户。

这应该有效,或者很快就会结束。

@accounts = Array.new
clients.each do |client|
  @accounts += client.accounts
end