【问题标题】:How would I write this SQL query in Rails 3.2 syntax?我将如何用 Rails 3.2 语​​法编写这个 SQL 查询?
【发布时间】:2017-01-19 19:00:02
【问题描述】:

我的 Track.rb 模型有以下代码。有没有办法使用更多的 Rails 语法来编写它?我正在使用 Rails 3.2

@track = Track.find(7)


Submission.joins("LEFT JOIN missions ON missions.id = submissions.mission_id")
          .joins("LEFT JOIN tracks ON tracks.id = missions.track_id")
          .where("missions.track_id = ?", track.id)

型号:

Track.rb
   has_many :missions

Mission.rb
   belongs_to :track
   has_many :submissions

Submission.rb
   belongs_to :mission

【问题讨论】:

  • 这些模型之间有关系吗?如果是这样,includes 就是要走的路。
  • 是的,我所有的模型都设置正确
  • 如果是,您可以通过预先加载所需的数据来锻炼belongs_to 类型的关系。 includes 具有添加连接的效果,而无需重新定义所涉及的所有内容。尝试一下,看看它会生成什么查询。您还可以设置has_many :missions, through: tracks 等,以便首先为此建立适当的关系。

标签: sql ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

首先,missions 真的需要左连接吗?您按missions.track_id 过滤,因此您不需要没有任务的提交。在这种情况下,内连接会更合适。

接下来,为什么要加入tracks——你在下一条sql中不用这张表。

有了这些想法,您可以将代码重写为:

Submission.joins(:mission).where(missions: { track_id: track.id })

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多