查询 - Ruby Rails

Query - Ruby on Rails

我不了解Rails

请问,如何在 Rails 中进行此查询?

SELECT *, count(v.id) numero_votos FROM ideas i left join votes v on v.idea_id = i.id group by i.id order by numero_votos desc, i.created_at

我试过了...

@listOfIdeas = Idea.find(:all, joins: "LEFT JOIN 'votes' on votes.idea_id = ideas.id",
                                    select: "ideas.*, count(votes.id) numero_de_votos",
                                    group: "ideas.id",
                                    order: "numero_de_votos DESC, ideas.created_at DESC")

但是,没有用,它向我显示了这条消息:

Couldn't find all Ideas with 'id': (all, {:joins=>"LEFT JOIN 'votes' on votes.idea_id = ideas.id", :select=>"ideas.*, count(votes.id) numero_de_votos", :group=>"ideas.id", :order=>"numero_de_votos DESC, ideas.created_at DESC"}) (found 0 results, but was looking for 2)

Rails版本:5.1.4

谢谢!

您的 SQL 查询看起来很奇怪。如果您的 sql 查询是:

SELECT i.*, count(v.id) AS numero_votos 
FROM ideas i 
LEFT JOIN votes v ON v.idea_id = i.id 
GROUP BY i.id 
ORDER BY numero_votos DESC, i.created_at

那么,您应该尝试以下操作:

Idea.select("ideas.*, count(votes.id) AS numero_votos ")
    .joins("LEFT JOIN votes ON votes.idea_id = ideas.id")
    .group("ideas.id")
    .order("numero_votos DESC")
    .order("ideas.created_at")