как обработать form_with используя запрос GET в качестве XHR - PullRequest
0 голосов
/ 17 мая 2019

Я работаю над приложением Rails 6 и хочу обновить вид страницы на основе раскрывающегося значения, выбранного с помощью XHR.Раскрывающийся список должен использовать метод GET, потому что я вызываю индексное действие.

Я использую form_with, который по умолчанию использует remote: true.Я не использую local: true.

Я пытался onchange: "Rails.fire(this.form, 'submit')" - это отправляет запрос XHR и получает ответ, но не обновляет представление.

Я пытался onchange: "this.form.submit();" - это делаетполная перезагрузка страницы без использования XHR.

Код из app / views / users / index.html.erb

<%= form_with url: station_users_path(station_id: Current.user.home_station), method: :get do |form| %>
          <%= form.select :user_status, options_for_select( { "Active users" => "unlocked", "Inactive users" => "locked"}, @user_status ), {}, { :onchange => "Rails.fire(this.form, 'submit')" } %>
        <% end %>

Код из app / controllers / users_controller.rb

  def index
    @user_status = params[:user_status] || "unlocked"
    @users = @station.users.send(@user_status) || []
    @user_status == "unlocked" ? seperate_managers_from_users : @managers = []
  end

1 Ответ

0 голосов
/ 17 мая 2019

В обмене просто напишите одну get_station_users() функцию. Внутри вы можете использовать ajax-вызовы.

В формах

<%= form_with url: station_users_path(station_id: Current.user.home_station), id: “form_id”, method: :get do |form| %>
  <%= form.select :user_status, options_for_select( { "Active users" => "unlocked", "Inactive users" => "locked"}, @user_status ), {}, { :onchange => "get_station_users()" } %>
<% end %>

Добавить скрипт

function get_station_users(){
$.ajax({
    type: "GET",
    url: "/station_users",
    data: {  $('#form_id').serialize(), },
    dataType: 'script'
});
}

Ваш ответ будет как JS. Так что вы можете использовать index.js.erb

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