Ruby on Rails - хэш модели для выбора тега - PullRequest
0 голосов
/ 19 ноября 2010

Я действительно хотел попытаться выяснить, как использовать категории или типы хэшей или массивов в моделях, но я чувствую, что я немного запутался.Вот что я пытаюсь сделать, и я был бы признателен за любую помощь.

У меня есть приложение Alert Model в моем приложении, и у меня изначально была таблица Alert_Type, но я хотел избавиться от нее, потому что было больше запросов, чемМне нужен был действительно только высокий, средний, низкий тип оповещения, поэтому я собирался переместить их в модель

  SEVERITY = { "High" => :high, 
               "Medium" => :medium,
               "Low" => :low }

<%= select :alert, :severity, Alert::SEVERITY, {:prompt => "Select one"}  %>

Я чувствую, что это неправильно, потому что когда я получаю значение базы данных, оно высокое, низкий, средний, но нужно получить текст этого значения.Когда я это сделал,

SEVERITY = {  :high => "High"
                   :medium => "Medium",
                   :low => "Low"  }

У меня были проблемы с выпадающими списками.Я пытаюсь найти наилучший практический подход, чтобы, когда мне могут понадобиться или не понадобиться переводы, он будет работать правильно.Должен ли я сделать хэш или просто массив.Большое спасибо!

1 Ответ

0 голосов
/ 19 ноября 2010

Методу выбора необходим массив в качестве 3-го аргумента со следующей формой:

[["field for_value_1", "field_for_name_attr_1"],
["field for_value_2", "field_for_name_attr_2"],
["field for_value_n", "field_for_name_attr_n"]]

или

["field for_value_and_attr_1", "field_for_value_and_attr_2","field_for_value_and_attr_n"]

Хеши не должны работать.Чтобы получить массив, вы можете сделать

SEVERITY = {  :high => "High"
                   :medium => "Medium",
                   :low => "Low"  }
<%= select :alert, :severity, Alert::SEVERITY.to_A, {:prompt => "Select one"}  %>

и передать методу массив.

К вашему сведению, лучше второй вариант (мой хэш SEVERITY), потому что (если вы знаете этот fogetit :) в Ruby,: one,: two,: три вещи являются экземплярами класса Symbol.Класс символов - это особый вид строк: каждый символ в памяти является синглтоном.

Эта характеристика сделала его идеальным для ключей хеша, потому что всегда: term ==: term ("Term"! = "Term", потому что есть разные экземпляры)

И для значений вхэш, его выборы (в вашем случае лучший подход - строки)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...