因此,我试图在需要提供大量用户ID的地方进行SQL查询。
目前,我正在尝试做的是:
following_ids = $redis.smembers(self.redis_key(:following))
Medium.includes([{comments: :user}, :likes, :user]).where("user_id IN (#{ following_ids.each { |id| id } }) OR user_id = :user_id", user_id: id)
现在的following_ids
格式如下:["1", "2", "3"]
,其中包含用户ID
但是我尝试执行的循环似乎仍然将整个数组放入SQL语句中。我可以从服务器日志中看到以下内容:
Medium Load (0.3ms) SELECT "media".* FROM "media" WHERE (user_id IN (["2", "3"]) OR user_id = 1)
PG::SyntaxError: ERROR: syntax error at or near "["
LINE 1: SELECT "media".* FROM "media" WHERE (user_id IN (["2", "3"])...
我在这里做错了什么?
尝试将内插代码更改为:
following_ids.to_s.tr("[]", "")
因此总计:
Medium.includes([{comments: :user}, :likes, :user]).where("user_id IN ( #{following_ids.to_s.tr("[]", "") }) OR user_id = :user_id", user_id: id)
更新:有关执行此操作的首选“活动记录方式”,请参见下面的Kaspar评论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句