, пока ответ @xdazz более чистый, этот способ возвращает требуемый результат.
@conditions = ""
ratings.each do |k, v|
@conditions << (@conditions.empty? ? "rating = '#{k}'" : " OR rating = '#{k}'") if v == "1"
end
@movies = Movie.where(@conditions)
EDIT:
Метод Hash # keys просто возвращает ключи хеша. Это может быть проиллюстрировано следующим:
p ratings.select { |k,v| v == "1" }.keys
# => ["G", "PG", "PG-13", "R"]
p ratings.select { |k,v| v == "1" }
# => {"G"=>"1", "PG"=>"1", "PG-13"=>"1", "R"=>"1"}
Хотя приведенный выше метод будет возвращать более 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.