我如何用Rails 3.2语法编写这个SQL查询?

时间:2017-01-19 19:00:02

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

我的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

1 个答案:

答案 0 :(得分:1)

首先,你真的需要missions的左连接吗?您按missions.track_id进行过滤,因此无需任务即可提交。在这种情况下,内部联接会更合适。

接下来,为什么需要加入tracks - 你不要在下一个sql中使用这个表。

考虑到这些想法,您可以将代码重写为:

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