如何解决Rails,Select2和Ransack返回Emprty数组
我有一个城市模型:
class Geo::City < Smth
self.table_name = 'cities_table'
has_many :streets,class_name: "Geo::Street",primary_key: :geo_code,foreign_key: :geo_code
目标是搜索城市中的所有街道并将其打印为搜索结果。在我的控制器中,我有一个如下的过滤方法:
def filter
@city_list = city_list
params[:q] ||= {}
params[:q][:ags8_id_eq] = @city_list[0][1]
if params[:q].present? && params[:q][:geo_code_eq].present?
@city = Geo::City.find_by(geo_code: params[:q][:geo_code_eq])
@collection = [["#{@city}","#{params[:q][:geo_code_eq]}"]]
end
@streets = @city.streets.limit(15)
@q = @streets.ransack(params[:q])
end
我还有一个search_city方法,如下所示:
def search_city
render json: city_list.select {|city| city.first.include?(params[:q][:geo_code_eq])}
end
还有我在上述方法中调用的私有方法city_list:
def city_list
all_cities = Geo::City.order('city_name').reduce([]) {|cities,c| cities << [c.name,c.geo_code]}
我必须更改所有方法名称,因为它是有效的,因此,_city列表只是一个示例,它也可以正常工作,我想这不是问题。我还有一个用于选择2的js文件。
(function() {
$(function() {
return $('.city-select2').select2({
ajax: {
url: "/filter/search_city",dataType: 'json',delay: 250,data: function (params) {
return {
q: {
geo_code_eq: params.term
}
};
},processResults: function(data) {
return {
results: $.map(data,function(obj) {
return {
id: obj[1],text: obj[0]
};
})
};
},cache: true
},minimumInputLength: 2,placeholder: "City",tags: false,tokenSeparators: [","],selectOnClose: true,allowClear: true
});
});
}).call(this);
它似乎正在工作,因为当我键入城市名称时,它会找到包含我键入的字母的城市。提交选择表单后会发生什么,就是我得到一个空数组,所以基本上是这样的:
该网址如下所示:
http://localhost:3000/filter/search_city?q%5Bgeo_code_eq%5D=16071003&commit=Search
我的观点是这样的:
= search_form_for @q,url: search_city_path do |f|
.columns.is-centered{style: 'padding-top: 100px;'}
.column.is-half
= f.select(:geo_code_eq,options_for_select(collection: @collection.present? ? @collection : [],input_html: { class: "city-select2 select-input" })
= f.submit "Search"
怎么了?如何打印城市街道?代码中可能存在一些拼写错误,因为我不得不替换名称,这不是我空数组的原因。另外,在网址中仅选择了B,也许是原因所在?但是它也可以找到geo_code,因此它应该能够将街道重新链接到geo_code,因为geo_code也是street_table的一部分。
解决方法
数组的主要原因是视图中的路径。应该是filter_path而不是search_city_path,因为它与我的select2从中获取数据的路径相同,因此提交时的重定向没有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。