如何将数组中的数字传递给SQL语句

时间:2014-12-30 22:43:40

标签: ruby-on-rails ruby

所以我正在尝试进行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"])...

我在这里做错了什么?

2 个答案:

答案 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;这样做。