Rails通过检索关联的对象

时间:2015-05-17 02:51:27

标签: ruby-on-rails associations rails-models

我正在寻找正确的语法来解决下面的问题。我有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

检索所有'客户'属于'用户' (我检查了控制台)。但是,我没能找到下一行的正确语法来检索所有'帐户'与那些'客户相关联。我试过(第2行)

@accounts = client.accounts

但我收到错误'未定义的方法"帐户"'。你能告诉我正确的语法吗?感谢。

2 个答案:

答案 0 :(得分:0)

如果您有以下型号:

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

这可能更容易使客户成为真正的&#34;加入模型&#34;但在某些方面,这种松耦合似乎更容易管理。

答案 1 :(得分:0)

您的“客户”是众多客户的阵列。

首先,将客户端更改为客户端以使事实更明确。

clients = current_user.clients

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

这应该有用,或者会关闭。

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