0
irb(main):001:0> a =  ["global climate change", "calamity", "glaciers", "new york times"]
  => ["global climate change", "calamity", "glaciers", "new york times"]
irb(main):002:0> a.join(', ')
  => "global climate change, calamity, glaciers, new york times"

我需要结果是

  => "global climate change", "calamity", "glaciers", "new york times"

想法?单线将是理想的。

4

4 回答 4

2

通过 ActiveRecord 将选项数组传递给查询的正确方法是使用查询参数:

a = ["global climate change", "calamity", "glaciers", "new york times"]
Category.where("name IN (?)", a)
# Generated query:
# Category Load (0.4ms)  SELECT `categories`.* FROM `categories` WHERE (name in ('global climate change','calamity','glaciers','new york times'))

您无需执行任何特殊操作即可将其转换为有效的 SQL 片段。您应该特别避免将字符串格式化为 SQL 片段,因为如果不仔细清理,您可能会在应用程序中打开 SQL 注入漏洞。

于 2013-09-05T21:36:18.313 回答
2

在查询中使用数组非常简单:

arr = ["global climate change", "calamity", "glaciers", "new york times"]
Category.where(:name => arr)

绝对不需要生成一些奇怪的字符串;)

于 2013-09-05T21:38:22.067 回答
0
a =  ["global climate change", "calamity", "glaciers", "new york times"]
=> ["global climate change", "calamity", "glaciers", "new york times"]
%Q!"#{a.join('", "')}"!
=> "\"global climate change\", \"calamity\", \"glaciers\", \"new york times\""
a.map{|e| "\"#{e}\""}.join(', ')
=> "\"global climate change\", \"calamity\", \"glaciers\", \"new york times\""
于 2013-09-05T21:19:33.350 回答
0
array = ['bob', 'bill']
new_array_string = array.map { |name| "'#{name}'" }.join(',')
=> "'bob', 'bill'"
User.where("name IN (#{new_array_string})")
于 2013-09-05T21:29:02.873 回答