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