Есть много способов сделать это.Вот пара идей.
Вы могли бы использовать case
:
case title
when /pet/
13
when /therapy|SPA|massaging|salon|hotspring/
5
when /present|gift/
4
#...
Это не сильно отличается от вашей стопки if
с.
Вы могли быпоместите ваши правила в Hash:
patterns = {
/pet/ => 13,
/therapy|SPA|massaging|salon|hotspring/ => 5,
/present|gift/ => 4,
# ...
}
match = patterns.find { |re, v| title.match(re) }
match = match.last if(match)
или Array:
patterns = [
[ /pet/, 13 ],
[ /therapy|SPA|massaging|salon|hotspring/, 5 ],
[ /present|gift/, 4 ],
# ...
}
match = patterns.find { |p| title.match(p.first) }
match = match.last if(match)
Значения в patterns
могут быть любыми: числа, строки, экземпляры какого-либо другого класса илидаже процы;Я использую этот шаблон с лямбдами в качестве значений довольно часто, он предлагает немного гибкости.Использование справочной таблицы, такой как patterns
, также имеет то преимущество, что ее легко редактировать во время выполнения;Вы даже можете загрузить таблицу поиска из базы данных или файла конфигурации.Форма Array очень похожа на то, как Rails обрабатывает свои таблицы маршрутизации.