从下拉列表中进行选择时,我希望更新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/