使用 AJAX - "No Results Found" 预填充 Select2
Pre populating Select2 using AJAX - "No Results Found"
我一直在按照此示例指南 (http://rails-select2-example.herokuapp.com/) 创建 select2 下拉菜单以从我的数据库中搜索国家/地区。
然而 select 框返回时总是空的 "No Results Found"。为什么它不会从 js/ajax 中获取值?
查看 (new.html.erb)
<select class="form-control" id="country_select">
</select>
控制器(Searches_controller.rb)
class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json
def new
@countries = Country.all
respond_with @countries
end
end
Javascript
$('#country_select').select2({
theme: "bootstrap",
ajax: {
url: "<%= user_searches_path(format: 'json') %>",
dataType: "json",
results: function(data, page) {
return { results: $.map( data, function(country, i) {
return { id: country.id, text: country.name }
} ) }
}
}
});
路线
resources :users do
resources :searches
end
搜索迁移
class CreateSearches < ActiveRecord::Migration
def change
t.string :country
end
add_index :searches, [:user_id, :created_at]
end
end
而不是使用 AJAX,对于国家/地区搜索,您可以直接使用 Rails 辅助方法
参见下面的示例:
在您的 application_helper.rb
文件中创建一个方法:
def get_country
Country.pluck(:name,:id)
end
在您的视图文件中:
<%= f.select :country_select, get_country, {prompt: 'Select Country'} %>
最后,添加如下js代码:
$("#country_select").select2({
placeholder: "Select Country"
});
由于您在new action中编写了代码,您调用的URL是错误的,
如果你想从新的动作中调用,
class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json
def new
@countries = Country.all
respond_with @countries
end
end
要么像这样更改 ajax 调用中的 url,
$('#country_select').select2({
theme: "bootstrap",
ajax: {
url: "<%= new_user_search_path(format: 'json') %>",
dataType: "json",
results: function(data, page) {
return { results: $.map( data, function(country, i) {
return { id: country.id, text: country.name }
} ) }
}
}
});
或将代码更改为索引操作,
class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json
def index
@countries = Country.all
respond_with @countries
end
end
然后,你可以使用你的url,
$('#country_select').select2({
theme: "bootstrap",
ajax: {
url: "<%= user_searches_path(format: 'json') %>",
dataType: "json",
results: function(data, page) {
return { results: $.map( data, function(country, i) {
return { id: country.id, text: country.name }
} ) }
}
}
});
我一直在按照此示例指南 (http://rails-select2-example.herokuapp.com/) 创建 select2 下拉菜单以从我的数据库中搜索国家/地区。
然而 select 框返回时总是空的 "No Results Found"。为什么它不会从 js/ajax 中获取值?
查看 (new.html.erb)
<select class="form-control" id="country_select">
</select>
控制器(Searches_controller.rb)
class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json
def new
@countries = Country.all
respond_with @countries
end
end
Javascript
$('#country_select').select2({
theme: "bootstrap",
ajax: {
url: "<%= user_searches_path(format: 'json') %>",
dataType: "json",
results: function(data, page) {
return { results: $.map( data, function(country, i) {
return { id: country.id, text: country.name }
} ) }
}
}
});
路线
resources :users do
resources :searches
end
搜索迁移
class CreateSearches < ActiveRecord::Migration
def change
t.string :country
end
add_index :searches, [:user_id, :created_at]
end
end
而不是使用 AJAX,对于国家/地区搜索,您可以直接使用 Rails 辅助方法
参见下面的示例:
在您的 application_helper.rb
文件中创建一个方法:
def get_country
Country.pluck(:name,:id)
end
在您的视图文件中:
<%= f.select :country_select, get_country, {prompt: 'Select Country'} %>
最后,添加如下js代码:
$("#country_select").select2({
placeholder: "Select Country"
});
由于您在new action中编写了代码,您调用的URL是错误的, 如果你想从新的动作中调用,
class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json
def new
@countries = Country.all
respond_with @countries
end
end
要么像这样更改 ajax 调用中的 url,
$('#country_select').select2({
theme: "bootstrap",
ajax: {
url: "<%= new_user_search_path(format: 'json') %>",
dataType: "json",
results: function(data, page) {
return { results: $.map( data, function(country, i) {
return { id: country.id, text: country.name }
} ) }
}
}
});
或将代码更改为索引操作,
class SearchesController < ApplicationController
before_action :require_user
respond_to :html, :json
def index
@countries = Country.all
respond_with @countries
end
end
然后,你可以使用你的url,
$('#country_select').select2({
theme: "bootstrap",
ajax: {
url: "<%= user_searches_path(format: 'json') %>",
dataType: "json",
results: function(data, page) {
return { results: $.map( data, function(country, i) {
return { id: country.id, text: country.name }
} ) }
}
}
});