Форма поиска Rails с использованием выпадающего поля - PullRequest
0 голосов
/ 08 января 2012

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

У меня есть две модели:: клиент и: работа.У клиента много рабочих мест, а рабочие места принадлежат клиентам.

В моем route.rb у меня есть следующий вложенный ресурс:

resources :client do
  resources :job 
end

Следующий путь при ручном вводе не решает никаких проблем:

/client/:client_id/job

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

У меня есть следующая форма в view / job / index.erb

<%= form_tag( client_index_path, :action => 'index', :method => 'get' ) do %>
  <%= collection_select ("job", "client_id", Client.all, "id", "name", {:include_blank => 'Filter by client'}) %>
  <%= submit_tag 'Go' %>
<% end %>

, которая при отправке разрешается в:

/client?utf8=✓&job%5Bclient_id%5D=2&commit=Go 

Это HTML-код, созданный rails:

<select id="job_client_id" name="job[client_id]">
  <option value="">Filter by client</option>
  <option value="1">client1</option>
  <option value="2">client1</option>
  <option value="3">client2</option>
</select>

Любая помощь с благодарностью, спасибо

1 Ответ

1 голос
/ 08 января 2012

Вы не можете сделать это через чистый HTML без JavaScript. Формы всегда отправляются по одному URL, а любые данные передаются через параметры POST или GET (это после /client?).

Есть два варианта.

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

$("#form").submit(function(){
  client_id = $("#job_client_id").val();
  window.location = '/client/' + client_id + '/job/';
  return false; // don't sumbmit the form
})

РЕДАКТИРОВАТЬ : вот рабочий пример: http://jsfiddle.net/Fj5Kh/1/

Ваш второй вариант - фактически отправить форму на сервер и выполнить там перенаправление. Это дополнительный серверный вызов, но он будет работать без JavaScript. Вы должны создать специальное действие контроллера, которое понимает форму и использовать redirect_to строку

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