所以我正在尝试进行SQL查询,我需要提供大量用户ID。
目前我要做的是:
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"])...
我在这里做错了什么?
答案 0 :(得分:2)
你不需要那么复杂的事情。你可以简单地做
user_ids = $redis.smembers(self.redis_key(:following)) << id
Medium.includes([{comments: :user}, :likes, :user]).where(user_id: user_ids)
答案 1 :(得分:1)
尝试将插值代码更改为:
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评论,了解首选的&#39;有效记录方式&#39;这样做。