【发布时间】:2014-04-23 01:15:22
【问题描述】:
我正在努力解决似乎是 ruby 语义问题。我正在编写一个从表单中获取可变数量的参数并创建Postgresql查询的方法。
def self.search(params)
counter = 0
query = ""
params.each do |key,value|
if key =~ /^field[0-9]+$/
query << "name LIKE ? OR "
counter += 1
end
end
query = query[0..-4] #remove extra OR and spacing from last
params_list = []
(1..counter).each do |i|
field = ""
field << '"%#{params[:field'
field << i.to_s
field << ']}%", '
params_list << field
end
last_item = params_list[-1]
last_item = last_item[0..-3] #remove trailing comma and spacing
params_list[-1] = last_item
if params
joins(:ingredients).where(query, params_list)
else
all
end
end
尽管 params_list 是一个数值数组,在数量上与“name LIKE?”匹配?在查询部分,我收到一个错误:绑定变量的数量错误(1 对 2)在:name LIKE 中? OR name LIKE ? 我尝试使用 params_list 作为字符串,但也没有更好的效果。 我对红宝石很陌生。
我使用以下代码为 2 个参数工作,但希望允许用户最多提交 5 个 (:field1, :field2, :field3 ...)
def self.search(params)
if params
joins(:ingredients).where(['name LIKE ? OR name LIKE ?',
"%#{params[:field1]}%", "%#{params[:field2]}%"]).group(:id)
else
all
end
end
有人能解释一下我应该如何编程吗?
【问题讨论】:
-
您应该发布输入和相关预期输出的示例(即您对
query和params_list的预期值)。 -
params_list 在这种情况下是一个字符串数组,需要在 sql 语句中识别为单个组件而不是 1 个变量。我希望这是有道理的。
标签: ruby-on-rails ruby postgresql rails-activerecord