Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby在WHERE子句中使用带有多个选项的查询_Ruby_Where - Fatal编程技术网

Ruby在WHERE子句中使用带有多个选项的查询

Ruby在WHERE子句中使用带有多个选项的查询,ruby,where,Ruby,Where,我想提出一个更好的建议。。。更好地使用ruby功能。谁能给我一个更好的解决方案来组合这个查询 @conditions = "" if(ratings["G"] == "1") @conditions += " 'G' " end if(ratings["PG"] == "1") @conditions += " OR rating = 'PG' " end if(ratings["PG-13"] == "1") @conditions += " OR rating = 'PG-1

我想提出一个更好的建议。。。更好地使用ruby功能。谁能给我一个更好的解决方案来组合这个查询

@conditions = ""
if(ratings["G"] == "1")
  @conditions += " 'G' "

end
if(ratings["PG"] == "1")
  @conditions += " OR rating = 'PG' "

end
if(ratings["PG-13"] == "1")
  @conditions += " OR rating = 'PG-13' "

end
if(ratings["R"] == "1")
  @conditions += " OR rating = 'R' "

end

@movies = Movie.where("rating = "+ @conditions)

return @movies

非常感谢,

虽然@xdazz answer更干净,但这种方法返回所需的输出

Movie.where(:rating => ratings.select({|k,v| v == "1"}).keys)
@conditions = ""
ratings.each do |k, v|
  @conditions << (@conditions.empty? ? "rating = '#{k}'" : " OR rating = '#{k}'") if v == "1"
end
@movies = Movie.where(@conditions)
而上述方法将返回更类似SQL的字符串:

p @conditions 
# => "rating = 'G' OR rating = 'PG' OR rating = 'PG-13' OR rating = 'R'"
最后,@xdazz方法可以重写为以下内容,以获得相同的输出:

p "rating = '" + ratings.select { |k,v| v == "1" }.keys.join("' OR rating = '") + "'"
# => "rating = 'G' OR rating = 'PG' OR rating = 'PG-13' OR rating = 'R'"
编辑2:
为了弄清楚,如果最初的问题是关于Rails的,那么应该使用@xdazz答案。

请您帮助解释一下,这得到的是完整对象,而zdazz只是键,这有什么区别吗?如果xdazz没有钥匙会怎么样?嗯,我有!谢谢你们!如果可能,请详细介绍.key的使用。谢谢
p "rating = '" + ratings.select { |k,v| v == "1" }.keys.join("' OR rating = '") + "'"
# => "rating = 'G' OR rating = 'PG' OR rating = 'PG-13' OR rating = 'R'"