从带有Rails 5的where子句的两个表中进行选择

时间:2017-09-22 15:11:28

标签: mysql sql ruby-on-rails ruby

我有模型User(用户表)和Job(作业表)。一个用户可以拥有许多工作(一对多关系)。 用户模型:

has_many :jobs, foreign_key: :user_id

工作模式:

belongs_to :user

用户表有电子邮件列。作业表具有外键user_id和列job_name。 用户表中有一行,其id = 1,并且jobs表中有一行,user_id = 1。

我想从两个表行中选择users.email = some email

首先我尝试使用:includes,但是:

  

用户加载(0.5ms)SELECT users。* FROM users WHERE usersemail ='email@email.com'LIMIT 11

     

作业加载(0.0ms)SELECT jobs。* FROM jobs WHERE identitiesuser_id = 1

     

ActiveRecord :: 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 emailjoin

的两个表格中获得结果

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您希望能够获取通过电子邮件过滤的用户并获取与该用户相关的所有作业。如果是这样,以下将起作用,

User.where(email: 'email@email.com').includes(:jobs)

这会根据电子邮件获取用户并急切加载与用户相关的作业。这意味着如果您确实需要列出职位,那么您应该只包括。

如果您使用连接,那么如果有没有工作的用户,他将不会被列出,因为连接在ActiveRecord中被转换为“INNER JOIN”。