2017-10-31 3 views
-2

私はRailsの知識がありませんクエリ - Ruby on 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") 

しかし、動作しませんでした...これを試してみました、それは私にこのメッセージを見せている:

を 'ID' を持つすべてのアイデアを見つけることができませんでした: (すべて、{:joins => "LEFT JOIN 'はvote.idea_id = ideas.idに投票します)、:select =>" ideas。*、count(votes.id)numero_de_votos "、:group =>" ideas.id "、:order =>" numero_de_votos DESC、ideas.created_at DESC "})(結果は0件でしたが、2件を検索しました)

レールのバージョン:5.1.4

ありがとう!

+0

'SQLクエリに –

答えて

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") 
+0

おかげであなたの助けを修正!しかし、私は左結合、 を作る必要があるので、私はすべてのアイデアを表示する必要があり、私は "left_joins"に変更すると私にメッセージ "未定義のメソッド"が表示されます –

+0

申し訳ありません。私は今私の応答を更新しています。 – charlesdg

+0

アクティブなレコードのdoc:http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-joins – charlesdg