form_with выполняет действие, но не отображает правильно - PullRequest
0 голосов
/ 02 мая 2019

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

Вот лог:

Started GET "/detected_vehicles?utf8=%E2%9C%93&%3Aq%5Blocation_eq%5D=1&commit=Search" for 127.0.0.1 at 2019-05-02 10:33:08 +0800
Processing by DetectedVehiclesController#index as JS
  Parameters: {"utf8"=>"✓", ":q"=>{"location_eq"=>"1"}, "commit"=>"Search"}
  Rendering detected_vehicles/index.html.slim within layouts/application
  Rendered shared/_flash.html.slim (3.1ms)
  Rendered detected_vehicles/index.html.slim within layouts/application (80.9ms)
  Rendered layouts/_navbar.html.slim (2.9ms)
  Rendered layouts/_footer.html.slim (3.6ms)
Completed 200 OK in 326ms (Views: 271.7ms | ActiveRecord: 6.4ms)

Вот мой form_with код:

    = form_with url: detected_vehicles_path, method: :get, class: 'ui form' do |f|
        .field
            = select_tag(":q[location_eq]", options_from_collection_for_select(Camera.all, "id", "full_location"), class: 'form-control', id: 'detected_vehicle')
        = f.submit 'Search', class: 'form-control'

Я попытался сделать то же самое, используя form_tag, и он работает как положено. Вот мой код, используя form_tag:

    = form_tag detected_vehicles_path, method: :get, class: 'ui form' do
        .field
            = select_tag(":q[location_eq]", options_from_collection_for_select(Camera.all, "id", "full_location"), class: 'form-control', id: 'detected_vehicle')
        = submit_tag 'Search', class: 'form-control'

Хотя я знаю, что могу согласиться с решением form_tag прямо сейчас, я хотел бы выяснить, что не так с тем, как я сконструировал form_with, поскольку он может вскоре стать стандартом для написания форм, начиная с form_tag и form_for технически мягко устарели, как я прочитал.

1 Ответ

1 голос
/ 02 мая 2019

Если присмотреться, при использовании form_with вы используете JS для запроса:

Processing by DetectedVehiclesController#index as JS

, потому что form_with устанавливает local: false по умолчанию :

:local - По умолчанию отправка формы является удаленным и ненавязчивым XHR.Отключите удаленную отправку с помощью local: true.

Итак, добавьте local: true к form_with и посмотрите, что произойдет.

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