我有三个表 Business、Users 和 Subscriptions。目标是能够获得与用户关联的企业名称。结果应该是用户在订阅中注册的一组企业名称
表格列表
Schema | Name | Type |
--------+-------------------+-------
public | businesses | table
public | subscriptions | table
public | users | table
业务表
Column | Type
------------+-----------------------------
id | integer
name | character varying(255)
created_at | timestamp without time zone
updated_at | timestamp without time zone
商业模式
class Business < ActiveRecord::Base
kết thúc
订阅表
Column | Type
-------------+-----------------------------
id | integer
user_id | integer
business_id | integer
created_at | timestamp without time zone
updated_at | timestamp without time zone
订阅模式
class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :business
kết thúc
用户表
Column | Type
-----------------+-----------------------------
id | integer
username | character varying(255)
password_digest | character varying(255)
email | character varying(255)
created_at | timestamp without time zone
updated_at | timestamp without time zone
用户模型
class User < ActiveRecord::Base
has_secure_password
has_many :subscriptions
kết thúc
Rails 控制台
u = User.find(1)
u.subscriptions.businesses.name
Response: undefined method `business'
您可以使用 Rails 的内置 includes
仅通过一个查询来完成此操作,而不是对每个订阅进行额外的查询(如 Alireza 的回答)。方法:
subscriptions = u.subscriptions.includes(:business)
这将返回所有订阅的关系,包括它们的关联业务。现在您无需执行额外查询即可获取公司名称:
business_names = subscriptions.map {|sub| sub.business.name }
我认为Bạn cũng có thể sử dụng pluck
一步完成此操作:
business_names = u.subscriptions.includes(:business).pluck("businesses.name")
我不确定 pluck
dù với includes
配合得很好,但值得一试。
Tôi là một lập trình viên xuất sắc, rất giỏi!