13

**わかりやすくするために編集**

**編集の名前がドキュメントに変更されました**

特定のユーザーによる投票レコードを含むすべてのユーザードキュメントレコードを取得したいのですが、そのユーザーが一部のドキュメントレコードに投票されていない場合でも、投票なしですべてのドキュメントレコードを取得したいと思います。egzampleの場合:

+------------+--------------+------+
|document.par1|document.par2| vote |
+------------+--------------+------+
|    2       | z            | y    |
|    3       | w            | NULL |
|    4       | x            | NULL |
+------------+--------------+------+

Ruby on Railsでこれを試した場合:

I.最初の試み:

Document.
   joins("LEFT JOIN `votes` ON `votes`.`v_id` = `document`.`id` AND `votes`.`giver_id` = ?", user_id).
   where('document.creator_id = ?', user_id, .....).
   select('votes.*', `document.param1')

このエラーが発生しました:

RuntimeError in UserDocumentsController#show

unknown class: Fixnum

II。2回目の試行:

Document.
   joins("LEFT JOIN `votes` ON `votes`.`v_id` = `document`.`id`").
   where('document.creator_id = ? AND `votes`.`giver_id` = ?', user_id, user_id, .....).
   select('votes.*', `document.param1')

投票があるレコードのみを返します。

+-------------+-------------+------+
|document.par1|document.par2| vote |
+-------------+-------------+------+
|    2        | z           | y    |
+-------------+-------------+------+

したがって、2つのレコードが欠落しています。

**更新されました。このソリューションは機能します**

III。私の3回目の試み、助けてくれてありがとうMischa:

Document.
   joins("LEFT JOIN `votes` ON `votes`.`v_id` = `document`.`id`").
   where('document.creator_id = ? AND (`votes`.`giver_id` = ? OR  `votes`.`giver_id` IS NULL)', user_id, user_id).
   select('votes.*', `document.param1')

+-------------+-------------+------+
|document.par1|document.par2| vote |
+-------------+-------------+------+
|    2        | z           | y    |
|    3        | w           | NULL |
|    4        | x           | NULL |
+-------------+-------------+------+
4

3 に答える 3

9

これにより、必要な結果セットが得られます。

Document.
   joins("LEFT JOIN `votes` ON `votes`.`v_id` = `document`.`id`").
   where('document.creator_id = ? AND (`votes`.`giver_id` = ? OR  `votes`.`giver_id` IS NULL)', user_id, user_id).
   select('votes.*', `document.param1')
于 2012-11-16T09:31:42.680 に答える
0

条件句は に表示されませんjoins

これはうまくいくはずです:

Myclass.
  joins("LEFT JOIN `votes` ON `votes`.`v_id` = `myclass`.`id`").
  where('myclass.creator_id = ? AND `votes`.`giver_id` = ?', user_id, user_id, .....).
  select('votes.*', `myclass.param1')
于 2012-11-15T23:31:52.550 に答える
0

私は同じ問題を抱えていましたが、機能していないようです。文字列変数を宣言し、この文字列に「ON」条件を渡してSQLコマンドでこれを参照することでこれを解決する1つの方法を見つけました。

例えば:on_condition = "(votes.giver_id ="+user_id+")"

コマンドは次のとおりです。

Myclass.joins("LEFT JOIN votes).on(on_condition).where('myclass.creator_id = ?', user_id).select('votes.*', myclass.param1)

于 2014-09-08T17:43:57.583 に答える