查询 - Ruby on Rails

时间:2017-10-31 17:01:24

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我不了解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")

但是,没有工作,它向我展示了这个信息:

  

无法找到所有想法' :(全部,{:加入=>" LEFT JOIN'投票'对投票.idea_id = ideas .id",:select =>" ideas。*,count(votes.id)numero_de_votos",:group =>" ideas.id",:order =&gt ;" numero_de_votos DESC,ideas.created_at DESC"})(找到0结果,但正在寻找2)

Rails版本:5.1.4

谢谢!

1 个答案:

答案 0 :(得分:1)

您的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")