Rails 4.2.2 -如何动态创建jtree



在rails 4.2.2中,我使用jstreeancestry宝石进行文件结构。现在我能够生成祖先数据,但我不能在jtree函数中访问它。我从本教程中引用。当我使用相同的示例时,我得到了如下错误,

NoMethodError (undefined method `category_path' for #<Module:0x00000004b1cd40>):
app/models/category.rb:12:in `block in build_display_ancestry'
app/models/category.rb:7:in `each'
app/models/category.rb:7:in `build_display_ancestry'
app/models/category.rb:21:in `viewed_ancestry'

模型代码为,

class Category < ActiveRecord::Base
  has_ancestry
  belongs_to :user
  belongs_to :asset
  def self.build_display_ancestry(category_hierarchy, tailored_hierarchy_data = [])
    category_hierarchy.each do |category_data|
      state = category_data['children'].empty? ? 'leaf' : 'open'
      custom_display_data = {
        :data => category_data['name'],
        :state => state,
        :metadata => { href: Rails.application.routes.url_helpers.category_path(category_data['id']) },
        :children =>  build_display_ancestry(category_data['children'], [])
      }
      tailored_hierarchy_data << custom_display_data
    end
    tailored_hierarchy_data
  end
  def self.viewed_ancestry
    build_display_ancestry(self.arrange_serializable, [])
  end
end

控制器代码为,

class Users::CategoriesController < ApplicationController
  def index
  end
  def view_ancestry
    render json: { data: 'Categories', state: 'open', metadata: { href: categories_path }, children: Category.viewed_ancestry }
  end
end

的观点是

<div id="category-hierarchy"></div>
<script type="text/javascript">
  $(document).ready(function(){
  $("#category-hierarchy").jstree({
    "json_data": {
        "ajax" : {
            "url" : $("#category-hierarchy").attr('data-path'),
            "data" : function (n) {
                return { id : n.attr ? n.attr("id") : 0 };
            }
        }
    },
    plugins : ["themes", "json_data", "ui"],
    themes : {"theme": "default", "icons":false, "dots": true, "open":true},
    core: {"animation": 100}
   }).bind("select_node.jstree", function(e, data) {
    if (jQuery.data(data.rslt.obj[0], "href")) {
        window.location = jQuery.data(data.rslt.obj[0], "href");
    }
  })
 });
</script>

路线,

get 'users/categories/index' => 'users/categories#index', :as=> :categories
get 'users/categories/view_ancestry' => 'users/categories#view_ancestry', :as=> :users_categories_view_ancestry

这里是否需要创建category_path路由?如果是,应该采取什么行动?请帮我解决这个问题,也给我一些例子(完整的代码)链接参考。

jtree改变了它的语法,很多,检查他们的网页。我能够通过(从相同的教程:))这一步通过改变代码从教程:

.jstree({ 'core' : {
    'data': {
            'url' : '<some url>/<JSONdatasource>',
            'data' : function (n) {
                return { id : n.attr ? n.attr('id') : 0 };
            }
    }
  }
})

紧跟网页上的(所有)变化,尽管我必须说这很不方便。

编辑。注意,虽然一个问题(如所问)确实有未定义方法的问题,但在我回答的时候,根本/潜在问题是jsTree节点的JSON数据的语法发生了变化。

你可以在你的rails应用目录中输入rake routes | grep categor,使用你的终端来查看哪些路由是可用的。

你可能应该使用rails资源路由:

http://guides.rubyonrails.org/routing.html

namespace :users do
  resources :categories do
    collection do
      get :view_ancestry
    end
  end
end

相关内容

  • 没有找到相关文章

最新更新