微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 如何将参数传递给LEFT JOIN?

**修改为更好的可理解性**

**编辑重新命名为文档**

我想用给定用户的投票记录获取所有用户的文档记录,如果该用户没有投票支持某些文档记录,我仍然希望得到所有的文档记录,而无需投票.
例如:

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

在Ruby on Rails上,如果我尝试这样:

冷杉试试:

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.第二尝试:

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

仅返回有投票记录:

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

所以没有2条记录..

**更新,此解决方案工作**

III.我的第三个尝试,谢谢你的帮助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).
   select('Votes.*',`document.param1')

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

解决方法

这将为您提供您需要的结果集:
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)',`document.param1')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐