从下拉列表中进行选择时,我希望更新URL。我希望查询是动态的,这是以下代码:

  <select id="mySchool" onchange="this.form.submit()">
    <% @schools.each do |school| %>
      <option value="<%= school.id %>"><%= school.name %></option>
    <% end %>
  </select>

  <%= link_to "Apply School", "schools/assign_users?user_id=#{@user.id}&school_id=", :class => "btn btn-primary", :type => "button" %>


谁能指出我正确的方向?

最佳答案

这不是在rails中创建select的最佳方法。您应该这样使用rails select_tag helper

<%= select_tag 'school_id', options_for_select(@schools.collect{ |s| [u.name, u.id] }), id: "mySchool" %>



  从下拉列表中进行选择时,我希望更新URL。


我认为与其仅在前面显示链接,不应该在用户从下拉菜单中选择一个值时才显示链接,因此您的代码应如下所示:

<%= select_tag 'school_id', options_for_select(@schools.collect{ |s| [u.name, u.id] }), id: "mySchool" %>

<div id="schoolLink"></div>

#_link.html.erb
<%= link_to "Apply School", "schools/assign_users?user_id=#{user.id}&school_id=#{school.id}", :class => "btn btn-primary", :type => "button" %>


现在,将要将ajax请求发送到的路由:

post 'selected_school/:id' => 'school#selected', as: "select_school"


编写一个js函数,它将在下拉列表中更改值时发送ajax请求

$(document).on("change","#mySchool",function(e){
  var school_id = $(this).val();
  $.ajax({
    type: "POST",
    url: "/selected_school",
    data: {id : school_id }
  });
});


在控制器中找到学校和用户,然后最终通过js呈现链接

#school_controller.rb
def selected
  @school = School.find(params[:id]) # find school by the passed id
  @user = current_user # your logic to find user
end

#app/views/school/selected.js
$("#schoolLink").html("<%=j render partial: 'link', locals: {user: @user, school: @school} %>");


有关详细信息,请参见Working with Javascript in Rails

关于javascript - 使用JS/Rails和下拉列表更新URL查询字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26612998/

10-11 22:21
查看更多