我正在寻找正确的语法来解决下面的问题。我有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
但我收到错误'未定义的方法"帐户"'。你能告诉我正确的语法吗?感谢。
答案 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