добавление значений в поле выбора из функции контроллера (Ruby on Rails) - PullRequest
1 голос
/ 19 декабря 2009

У меня есть веб-приложение Rails с полем выбора:

<%= select_tag :foo %>

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

Хорошо, если значения жестко закодированы в функцию.

def populate
  # what goes here?
end

Ответы [ 2 ]

2 голосов
/ 19 декабря 2009

Взгляните на options_for_select . Он строит HTML для того, что вы хотите отобразить.

  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>

Вы можете просто передать результат этой функции в select_tag следующим образом:

  <%= select_tag 'company_id', options_for_select(@current_user.active_companies.map { |c| [c.name, c.id] }) %>
0 голосов
/ 20 декабря 2009

Выполнение таких вещей, как заполнение выбора, лучше всего выполнять в качестве помощника. Если ваш контроллер называется MyController, то вы можете иметь модуль MyHelper в каталоге помощников. Методы и т. Д. Внутри помощника будут доступны в ваших шаблонах представления. Таким образом, вы можете иметь populate_select метод в вашем MyHelper и делать там все, что вы хотите сделать в вашем контроллере. Это больше "путь рельсов". Помощники предназначены для работы с тяжелым кодом Ruby, который нужен вашим шаблонам, поэтому вам не нужно смешивать его с вашим XHTML.

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