我如何将下面的MySQL查询写入Rails ActiveRecord
select A.*, B.* from raga_contest_applicants_songs AS A join raga_contest_applicants AS B ON B.contest_applicant_id = A.contest_applicant_id join raga_contest_rounds AS C ON C.contest_cat_id = B.contest_cat_id WHERE C.contest_cat_id = contest_cat_id GROUP BY C.contest_cat_id
我知道如何在两个表上编写联接;但是,我对如何在3个表上使用联接不是很有信心。
要重写您在问题中遇到的SQL查询,我认为它应该类似于以下内容(尽管我很难完全可视化您的模型关系,所以这有点猜测):
RagaContextApplicantsSong. joins(:raga_contest_applicants => [:raga_content_rounds], :contest_cat). group('raga_contest_rounds.contest_cat_id')
…这样该joins方法可以同时处理两个联接以及WHERE子句,最后是group调用。
joins
WHERE
group
作为更多参考:
如果要将多个关联加入同一模型,则可以简单地列出它们:
Post.joins(:category, :comments) Returns all posts that have a category and at least one comment
如果要加入嵌套表,则可以将它们列出为哈希表:
Post.joins(:comments => :guest) Returns all comments made by a guest
嵌套关联,多个级别:
Category.joins(:posts => [{:comments => :guest}, :tags]) Returns all posts with their comments where the post has at least one comment made by a guest
您还可以链接ActiveRecord查询接口调用,例如:
Post.joins(:category, :comments) ...produces the same SQL as... Post.joins(:category).joins(:comments)
如果所有其他方法均失败,则始终可以将SQL片段直接传递到joins方法中,以此作为从工作查询到达以ARQI为中心的内容的垫脚石
Client.joins('LEFT OUTER JOIN addresses ON addresses.client_id = clients.id') => SELECT clients.* FROM clients LEFT OUTER JOIN addresses ON addresses.client_id = clients.id