Ruby在WHERE子句中使用带有多个选项的查询
我想提出一个更好的建议。。。更好地使用ruby功能。谁能给我一个更好的解决方案来组合这个查询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
@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'"