在rails 4.2.2中,我使用jstree
和ancestry
宝石进行文件结构。现在我能够生成祖先数据,但我不能在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.htmlnamespace :users do
resources :categories do
collection do
get :view_ancestry
end
end
end