具有血统的动态选择

2023-12-29

我的应用程序使用祖先宝石。

class Location < ActiveRecord::Base
 has_ancestry :cache_depth => true
 has_many :posts
end

class User < ActiveRecord::Base
 belongs_to :location
end

我创建了一些随机位置,

  • Alaska
  • California
    • 洛杉矶
    • Fresno
      • 辛科塔(弗雷斯诺)
      • 哈蒙德(弗雷斯诺)
      • 梅尔文(弗雷斯诺)

我的问题如果用户注册表单如果用户选择加利福尼亚州,则显示子级洛杉矶和弗雷斯诺,选择弗雷斯诺后则显示其子级。

我有下拉列表的 javascript 教程http://www.plus2net.com/javascript_tutorial/dropdown-list-demo.php http://www.plus2net.com/javascript_tutorial/dropdown-list-demo.php

如何可能与祖传宝石 https://github.com/stefankroes/ancestry?


Nested

首先,如果您想将它们全部保存在一个中dropdown,我们创建了以下帮助程序来为您实现这一目标:

#app/helpers/application_helper.rb
def nested_dropdown(items)
    result = []
    items.map do |item, sub_items|
        result << [('- ' * item.depth) + item.name, item.id]
        result += nested_dropdown(sub_items) unless sub_items.blank?
    end
    result
end

这将允许您调用:

<%= f.select(:category_ids, nested_dropdown(Category.all.arrange), prompt: "Category", selected: @category ) %>

这将使您能够致电single下拉菜单,已根据您的祖先关联嵌套

--

Ajax

如果你想要有双下拉框,你可能需要实现一个ajax每次初始下拉列表更改时提取所需数据的函数:

#config/routes.rb
resources :categories do
    get :select_item
end

#app/assets/javascripts/application.js
$("#first_dropdown").on("change", function(){
   $.ajax({
       url: "categories/"+ $(this).val() + "/select_item",
       dataType: "json",
       success: function(data) {
          //populate second dropdown
       }
   })
});

#app/controllers/categories_controller.rb
Class CategoriesController < ApplicationController
    respond_to :json, only: :select_item

    def select_item
       category = @category.find params[:category_id]
       respond_with category.children
    end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有血统的动态选择 的相关文章

随机推荐