通过查询生成以下has_many的最有效方法是啥
Posted
技术标签:
【中文标题】通过查询生成以下has_many的最有效方法是啥【英文标题】:What is the most efficent way generate the following has_many through query通过查询生成以下has_many的最有效方法是什么 【发布时间】:2013-10-02 21:36:33 【问题描述】:我有以下型号:
帐户
class Account < ActiveRecord::Base
has_many :members
has_many :users, through: :members
end
会员
class Member < ActiveRecord::Base
belongs_to :account
belongs_to :user
end
用户
class User < ActiveRecord::Base
has_many :accounts, through: :members
end
查询:
给定User.id
,找到该帐户。目前我这样做:
> u = User.take
User Load (1.5ms) SELECT "users".* FROM "users" LIMIT 1
> id = Member.where(user_id: u.id).pluck(:account_id)
(0.8ms) SELECT "members"."account_id" FROM "members" WHERE "members"."user_id" = 1
> a = Account.find(id)
Account Load (8.9ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 LIMIT 1 [["id", 1]]
想知道在给定用户的情况下是否有更好或更快的方法来查找帐户?
【问题讨论】:
【参考方案1】:我不知道您的模型的详细信息,但根据错误,您的 User
模型中似乎需要 members
关联:
class User < ActiveRecord::Base
has_many :members
has_many :accounts, through: :members
end
【讨论】:
【参考方案2】:为什么不这样做
u = User.take
a = u.accounts.find(id)
【讨论】:
我试过了,但它给了ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :members in model User
以上是关于通过查询生成以下has_many的最有效方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
修改 Eloquent 查询以使其始终返回空集合的最有效方法是啥?
通过 JavaScript 对 HTML 表格进行排序的最有效方法是啥?