【发布时间】:2017-09-22 15:11:27
【问题描述】:
我有模型User(用户表)和Job(工作表)。一个用户可以有许多工作(一对多关系)。
用户模型:
has_many :jobs, foreign_key: :user_id
工作模式:
belongs_to :user
用户表有电子邮件列。 Jobs 表具有外键 user_id 和列 job_name。
users 表中有一行 id = 1,jobs 表中有一行 user_id = 1。
我想从两个表行中选择users.email = some email。
首先我尝试使用:includes,但是:
用户负载 (0.5ms) SELECT
users.* FROMusersWHEREusers.工作负载 (0.0ms) SELECT
jobs.* FROMjobsWHEREidentities.user_id= 1ActiveRecord::Relation [#User id: 1, email: "email@email.com", name: "name",created_at: nil, updated_at: nil>]>
之后:joins:
User.joins(:jobs).where(users: {email: 'email@email.com'})
,它返回相同,但只有一个查询
ActiveRecord::Relation [#User id: 1, email: "email@email.com", name: "name",created_at: nil, updated_at: nil>]>
如果我这样做:
user = User.find(1)
user.jobs
我得到了结果。
如何从 users.email = some email 和 join 的两个表中获取结果?
【问题讨论】:
-
您期望在结果集中出现什么类的实例,
Job或User? -
用户,但如果不能,我只需要两个表中的数据。
-
因此您想将
Jobs' 字段推入User的实例中。这是破坏您的面向对象建模的某种方式。user = User.find(1); user.jobs有什么问题?当您迭代jobs时,您仍然有user在范围内并且能够使用他的数据。 -
我正在使用电子邮件,但如果我使用
user = User.where(email: 'some email')并且在该 user.jobs 之后,它会显示undefined method jobs -
嗯,是的,
User.where(email: 'some email')不是单个用户,而是一组用户(可能包含一个用户,或者没有用户,或者很多用户)。因此,您想获得具有特定电子邮件的用户的所有工作(或一个用户,如果它是唯一的)?
标签: mysql sql ruby-on-rails ruby