带有Rails 4的动态选择框

Dynamic select boxes with Rails 4

本文关键字:选择 动态 Rails 带有      更新时间:2023-11-01

我试图制作动态选择框(一个框在另一个框中选择信息),但遇到了一些问题。

路线.rb

get "students/new/update_tutors" => 'students#update_tutors', as: 'update_tutors'  

students_controller.rb

def update_tutors
    admin = Administrators.find(params[:administrator_id])
    #@tutors = admin.tutors.map{|t| [t.info.name, t.id]}
    debugger
    @tutors = Tutor.where(administrator_id: params[:administrator_id])
    respond_to do |format|
       format.js
    end
end
def new
    @user = Student.new
    @is_super_adm = is_super?
    if @is_super_adm
      @tutors = Tutor.all.map { |t| [t.info.name, t.id] }
      @admins = Administrator.where(is_super: false).map { |adm| [adm.info.name, adm.id] }
    else
      @tutors = Tutor.where(administrator_id: session[:type_id]).map { |t| [t.info.name, t.id] }
    end
end

new.html.erb

<%= form_for @user, remote: true do |student_form| %>
<!--....-->
<%= label_tag :administrator_id, "Choose local administrator" %><br/>
<%= select_tag :administrator_id, options_for_select(@admins), {id: 'administrator_selection'}  %><br/>
<!--....-->
<%= student_form.label :tutor_id, "Choose Tutor" %><br/>
<%= student_form.select :tutor_id, options_for_select(@tutors), {} , {id: 'tutor_selection'}%>  

students.coffee

$ ->
  $(document).on 'change', '#administrator_selection', (evt) ->
    $.ajax 'update_tutors',
      type: 'GET'
      dataType: 'script'
      data: {
        administrator_id: $("#administrator_selection option:selected").val()
      }
      error: (jqXHR, textStatus, errorThrown) ->
        console.log("AJAX Error: #{textStatus}")
      success: (data, textStatus, jqXHR) ->
        console.log("Dynamic country select OK!")

update_tutors.coffee

$("#tutor_selection").empty()
    .append("<%= escape_javascript(render(:partial => @tutors)) %>")

我尝试将alert('msg')插入到students.js.coffee中,事件成功了,所以我确信问题出在$.ajax中,但这是我第一次使用ajax,我找不到错误。

更新

我想问题出在路由上,但我不明白为什么它调用students/update_tutor而不是students/new/update_tutor
日志
已开始GET"/学生/update_tutors?administrator_id=3&amp_=1459590346845";对于127.0.0.1,2016年4月2日11:47:01+0200
StudentsController处理#显示为JS
参数:{"administrator_id"="gt;"3&","_&"="gt"1459590346845","id&"="gt;"update_tutors"}

固定

我将$.ajax中的update_tutors更改为'new/update_tutors',并将Administrators.find(...)中的update_tutors方法中的错误修复为Administrator.find(...)

Change your Ajax request as per given below,
$ ->
  $(document).on 'change', '#administrator_selection', (evt) ->
    $.ajax '<%= update_tutors_path %>',
      type: 'GET'
      dataType: 'script'
      data: {
        administrator_id: $("#administrator_selection option:selected").val()
      }
      error: (jqXHR, textStatus, errorThrown) ->
        console.log("AJAX Error: #{textStatus}")
      success: (data, textStatus, jqXHR) ->
        console.log("Dynamic country select OK!")