过滤选择列表之间的信息

时间:2015-10-24 02:52:11

标签: javascript html ruby-on-rails ruby

我正在努力建立一个人们可以投票的网站。在注册部分,人们可以选择他们的城市和州,但我真正想做的是根据他们的状态过滤城市,使用来自SQLite数据库的信息。以下是我在程序中调用选择列表的方法:

<%= f.label "Ciudad:" %>
<%= f.select :ciudade_id, grouped_options_for_select(Departamento.order(:nombre).map{ |group| [group.nombre, group.ciudades.map{ |ciudade| [ciudade.nombre, ciudade.id] } ] }), { prompt: true}, {:onchange => 'populate(this.id, 'puesto_id')'}, required: true, class: ' order_form ciudades_search'%>

这就是项目的展望:

州选择。

enter image description here

城市选择:

enter image description here

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您想通过AJAX访问Rails数据库中的州/城市信息,那么您需要创建一个提供该信息的路由和控制器。

然而,SQLite并没有真正削减它 - 它不是为大型生产数据库构建的,并且没有像ILIKE那样的搜索功能。我会推荐Postgres。

resources :states, only: [:show, :index] 
class State < ActiveRecord::Base
  has_many :cities
end

class City < ActiveRecord::Base
  belongs_to :state
end
class StatesController < ApplicationController
  # GET /states(.json)
  def index
    @states = State.all
    @states = State.where("name ILIKE ?", params[:search]) if params[:search]
    render json: @states
  end
  # GET /states/:id(.json)
  def show
    @state = State.includes(:cities).find(params[:id])
    render json: @state, include: :cities
  end
end

然后,您可以将其与Select2之类的内容结合使用,或者使用自己的解决方案。

但是如果你要创建一个全局应用程序,你可能想要使用像http://www.geonames.org/这样的服务,因为保持最新的全局数据库会很疯狂。