Ruby on rails 动态选择框-根据以前的选择填充可用选项-Rails&;AJAX
动态选择框-根据以前的选择填充可用选项-Rails和AJAX 我一直在尝试在我的个人资料表格上创建一个动态选择框,根据学生选择的大学,表格会自动提供适当的评分比例,作为子选择框进行选择。但是,辅助选择框(评级)从未填充..argh 有人能看到我遗漏了什么吗 路线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
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>