Ruby on rails 动态选择框-根据以前的选择填充可用选项-Rails&;AJAX

Ruby on rails 动态选择框-根据以前的选择填充可用选项-Rails&;AJAX,ruby-on-rails,ajax,ruby-on-rails-4,Ruby On Rails,Ajax,Ruby On Rails 4,动态选择框-根据以前的选择填充可用选项-Rails和AJAX 我一直在尝试在我的个人资料表格上创建一个动态选择框,根据学生选择的大学,表格会自动提供适当的评分比例,作为子选择框进行选择。但是,辅助选择框(评级)从未填充..argh 有人能看到我遗漏了什么吗 路线 resources :student_profiles do get 'update_ranks', as: 'update_ranks' end 模型 rating.rb class Rating < Ac

动态选择框-根据以前的选择填充可用选项-Rails和AJAX

我一直在尝试在我的个人资料表格上创建一个动态选择框,根据学生选择的大学,表格会自动提供适当的评分比例,作为子选择框进行选择。但是,辅助选择框(评级)从未填充..argh

有人能看到我遗漏了什么吗

路线

resources :student_profiles do
    get 'update_ranks', as: 'update_ranks'
  end
模型

rating.rb
    class Rating < ActiveRecord::Base
    belongs_to :university_name
    end

university_name.rb
    class UniversityName < ActiveRecord::Base
    has_many :ratings
    end
updateranks.js.coffee(学生档案/updateranks.js.coffee)

$(“#评级_选择”).empty()
.append(“@ratings))%>”)
_rating.html.erb-部分(Ratings/_rating.html.erb)



我有一种感觉,这与我的路由有关,但我对AJAX或JS完全没有经验…

当您选择一个选项时,您是否看到服务器运行的rails控制台中发生了任何变化?因为在视图中,您定义了:
{id:'universitynames_select'}
作为选择框的id,在js代码中,您使用的是
#university_names_select
,这不会触发ajax调用。啊哈!正是ID不匹配导致我需要更新routes资源!那么它现在起作用了吗?您还可以将:
$(“#universitynames_select option:selected”).val()
,更改为:
$(“#universitynames_select”).val()
;太好了,它工作了!谢谢,当您选择一个选项时,您是否看到服务器正在运行的rails控制台中发生了任何更改?因为在视图中,您定义了:
{id:'universitynames_select'}
作为选择框的id,在js代码中,您使用的是
#university_names_select
,这不会触发ajax调用。啊哈!正是ID不匹配导致我需要更新routes资源!那么它现在起作用了吗?您还可以将:
$(“#universitynames_select option:selected”).val()
,更改为:
$(“#universitynames_select”).val()
;太好了,它工作了!谢谢Sahil
class StudentProfilesController < ApplicationController

before_action :require_user
respond_to :html, :json
def edit
@universitynames = UniversityName.all
        @ratings = Rating.all
       @studentprofile = StudentProfile.find(current_user.student_profile.id)
  end

  def update_ranks
    @ratings = Rating.where("university_name_id = ?", params[:university_name_id])
    respond_to do |format|
      format.js
  end 
End
<%= s.select :universityname, options_for_select(@universitynames.collect { |country|
    [country.name.titleize, country.id] }, 1), {}, { id: 'universitynames_select' } %>

                            <%= s.select :initialgpa, options_for_select(@ratings.collect { |rating|
    [rating.name.titleize, rating.id] }, 0), {}, { id: 'ratings_select' } %>
 $ ->
  $(document).on 'change', '#university_names_select', (evt) ->
    $.ajax 'update_ranks',
      type: 'GET'
      dataType: 'script'
      data: {
        country_id: $("#university_names_select option:selected").val()
      }
      error: (jqXHR, textStatus, errorThrown) ->
        console.log("AJAX Error: #{textStatus}")
      success: (data, textStatus, jqXHR) ->
        console.log("Dynamic country select OK!")
$("#ratings_select").empty()
  .append("<%= escape_javascript(render(:partial => @ratings)) %>")
<option value="<%= rating.id %>"><%= rating.name.titleize %></option>