gpt4 book ai didi

ruby-on-rails - 使用关系数据库

转载 作者:行者123 更新时间:2023-11-29 13:02:07 26 4
gpt4 key购买 nike

我有三个表 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

end

订阅表

   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
end

用户表

     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
end

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 }

认为您也可以使用 pluck 一步完成此操作:

business_names = u.subscriptions.includes(:business).pluck("businesses.name")

我不确定 pluck 是否与 includes 配合得很好,但值得一试。

关于ruby-on-rails - 使用关系数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26633635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com