рельсы 3 выберите раскрывающийся список - PullRequest
2 голосов
/ 02 августа 2011

как сделать так, чтобы выпадающий список выбора вел себя как ссылка в рельсах?Под этим я подразумеваю, когда кто-то выбирает опцию из списка, он публикует ее в URL.Например, если кто-то выберет свое имя «Томас» из поля, в URL-адресе будет отображаться ?name=Thomas.как я могу это сделать?

  <%= form_tag(orders_path, :method => "get") do %> 
    Choose a state
    <%= hidden_field_tag :id, "1" %>
    <%= select_tag :state, options_for_select(us_states) %>
    <%= submit_tag "Go" %>
  <% end %>

но когда я делаю это таким образом, я получаю кучу дополнительной информации внутри URL, например: ?utf8=✓&id=1&name=Thomas&commit=Go

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Причина, по которой все остальные поля отправляются, в том, что rails добавляет их по умолчанию всем своим помощникам. Часть commit=Go получена от помощника submit_tag, а utf8=✓ - потому что она добавлена ​​помощником form_tag. Самый простой способ добиться того, что вам нужно, это просто не использовать помощники других форм:

<form action="<%= orders_path %>" method="get">
  <%= select_tag :name, options_for_select(%w(John Jim Thomas)) %>

  <input type="submit" value="Go">
</form>

Выбрав «Томас» и нажав «Перейти», вы получите только ?name=Thomas в своем URL. Вы можете использовать помощник для отправки, если вы установите для него имя nil:

<form action="<%= orders_path %>" method="get">
  <%= select_tag :name, options_for_select(%w(John Jim Jones)) %>

  <%= submit_tag "Go", :name => nil %>
</form>
0 голосов
/ 02 августа 2011

Хороший вопрос, с которым у меня в последнее время был сбой.В итоге я определил новое действие в моем контроллере, которое принимает ответ и просто перенаправляет на окончательный URL через redirect_to.Я также попытался определить перенаправление непосредственно в моем rout.rb (без дополнительных действий в контроллере), но мне не повезло.

Это может помочь вам, но я тожеЛюбопытно увидеть другие (лучшие) решения.

...