У меня есть метод, который извлекает группы, которые присутствуют в определенных областях. Группам присваиваются значения country_id, region_id и city_id
Пользовательский интерфейс предоставляет три поля выбора, чтобы выбрать страну, регион из этой страны и затем город из этого региона. Чтобы найти все группы в определенном городе, у меня есть этот код:
@groups = Group.find(:all, :conditions => {:city_id => params[:city_id]})
Это все работает нормально, но я также хочу, чтобы он находил все группы в области, где не указаны более низкие критерии. Например, если указаны страна и регион, но не город, я бы хотел найти их по регионам.
Что я делаю, так это:
if !params[:city_id].nil?
@groups = Group.find(:all, :conditions => {:city_id => params[:city_id]})
else
if !params[:region_id].nil?
@groups = Group.find(:all, :conditions => {:region_id => params[:region_id]})
else
@groups = Group.find(:all, :conditions => {:country_id => params[:country_id]})
end
end
Это работает отлично, но кажется, что это немного неэффективно. Я делаю это наилучшим образом или могу немного оптимизировать?
Одна идея, которая у меня была, заключалась в том, чтобы иметь единую проверку на наличие всех параметров, но я не мог понять, как эффективно «игнорировать» параметры, которые были равны нулю, - моя главная мысль состояла в том, чтобы проверить, какие из них не были установлены, и установить их на что-то вроде '*' или 'true', но SQL не играет в эту игру.