如何使用GET请求作为XHR处理form_with

时间:2019-05-16 23:36:39

标签: ruby-on-rails

我正在使用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 :(得分:0)

在onchange中,只需编写一个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