【问题标题】:How to create Dynamic dropdown using an adjacency model in rails 4如何在 Rails 4 中使用邻接模型创建动态下拉列表
【发布时间】:2015-05-16 14:47:17
【问题描述】:

我有一个包含 id、位置和 parent_id 的邻接表。我创建它时知道它是创建动态类别和子类别下拉列表的最简单方法。我已经在网上和 SO 上搜索了将近一个星期的解决方案,但我发现所有的解决方案都很难作为一个初级程序员来理解。以下是我的表格示例:

id  location             parent_id
1   Philippines 
2   Metro Manila        1
3   Abra                1
4   CALOOCAN CITY       2
5   CITY OF LAS PIÑAS   2
6   PILAR               3
7   SALLAPADAN          3

我想要的是第二个下拉列表以动态显示所选任何父(省)的子(城市)。我能够创建一个简单的下拉列表,在其中选择 parent_id: 1 下的所有父名称(省),但我不知道如何从那里动态显示城市。我知道这与 AJAX 有关,但我离理解还差得很远。

下面是我列出所有父母(省)的第一个下拉列表:

= f.collection_select :location_id, Location.where("parent_id = 1"), :id, :name, { prompt: "Select a Location", class: 'form-control' }

我一直在寻找解决方案,但我不明白其中的大部分。对此问题的任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 如果您能清楚地表达您的实际问题,这将有所帮助。它似乎与 locations 表有关,但是您包含一个根本不引用它的视图。
  • 现在编辑了我的帖子。谢谢

标签: ruby-on-rails ajax postgresql


【解决方案1】:

我能够通过在我的模型中引用列表来使其工作:

class Location < ActiveRecord::Base
has_many :books
belongs_to :parent_location, class_name: Location
has_many :child_locations, class_name: Location, foreign_key: "parent_id"

结束

然后在我的表单中添加一个分组集合选择:

= f.collection_select :location_id, Location.where(parent_id: "1"), :id, :name, {prompt: "Select a Province"}, id: "province"
= f.grouped_collection_select :location_id, Location.all, :child_locations, :name, :id, :name, {prompt: "Select a City/Municipality"}, id: "city"

然后在我的 js.cofee 文件中添加一个仅显示所选省份下的城市的 jQuery:

jQuery ->
city = $('#city').html()
$('#province').select ->
    province = $('#province :selected').text()
    options = $(city).filter("optgroup[label='#{province}']").html()
    if options
        $('#city').html(options)
    else
        $('#city').empty()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多