Как правильно заполнять динамические / статические выпадающие меню в рельсах? - PullRequest
1 голос
/ 04 марта 2011

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

Мне всегда интересно, как другие люди заставляют их работать, например, как мне нужно заполнить поле со списком всеми странами, я создал класс с именем DropDownFiller и добавил метод с именем fill_countries, который бы возвращал массив со всеми страны.

Каковы лучшие практики в отношении этого или как вы это делаете?

1 Ответ

1 голос
/ 04 марта 2011

Помощник options_for_select принимает массив опций и строит выбор. Из документов:

options_for_select([["Dollar", "$"], ["Kroner", "DKK"]])
  <option value="$">Dollar</option>\n<option value="DKK">Kroner</option>

options_for_select([ "VISA", "MasterCard" ], "MasterCard")
  <option>VISA</option>\n<option selected="selected">MasterCard</option>

options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40")
  <option value="$20">Basic</option>\n<option value="$40" selected="selected">Plus</option>

options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA", "Discover"])
  <option selected="selected">VISA</option>\n<option>MasterCard</option>\n<option selected="selected">Discover</option>

Более подробные примеры есть в документации .

В зависимости от того, как настроены ваши данные, заполнить список может быть легко. Например:

options_for_select Country.select(:name).all.map { |c| c.name }

или для пользовательских значений

options_for_select Country.all.map { |c| [c.name, c.code] }

Что-то еще, что я видел несколько раз, это определение вспомогательного метода в модели, который возвращает правильные значения:

class Country
  # awesome country logic goes here!

  def self.array_for_select
    select(:name).all.map { |c| c.name }
  end
end

# a long time ago in a view far far away
options_for_select Country.array_for_select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...