简体   繁体   English

未定义的方法`__sort_option__':ancestry:Symbol

[英]undefined method `__sort_option__' for :ancestry:Symbol

When trying to view a tree in ActiveAdmin, this is throwing error: undefined method 'sort_option' for :ancestry:Symbol 当尝试在ActiveAdmin中查看树时,这会抛出错误: undefined method 'sort_option' for :ancestry:Symbol

This doesn't work with the combination: Mongoid, mongoid-ancestry and active_admin-sortable_tree But works fine with ActiveRecord, Ancestry and active_admin-sortable_tree 这不适用于组合:Mongoid,mongoid-ancestry和active_admin-sortable_tree但可以与ActiveRecord,Ancestry和active_admin-sortable_tree一起使用

Sample source code is at: https://github.com/nahankid/community 示例源代码位于: https//github.com/nahankid/community

Offending code snippet 违规代码段

 def order_by(*spec) option(spec) do |options, query| spec.compact.each do |criterion| criterion.__sort_option__.each_pair do |field, direction| add_sort_option(options, field, direction) end 

Trace (Incomplete) 跟踪(不完整)

> ActionView::Template::Error (undefined method `__sort_option__' for
> :ancestry:Symbol):
>     1: insert_tag renderer_for(:index)   origin (2.1.1) lib/origin/optional.rb:173:in `block (2 levels) in order_by'   origin
> (2.1.1) lib/origin/optional.rb:172:in `each'   origin (2.1.1)
> lib/origin/optional.rb:172:in `block in order_by'   origin (2.1.1)
> lib/origin/optional.rb:314:in `block in option'   origin (2.1.1)
> lib/origin/optional.rb:312:in `tap'   origin (2.1.1)
> lib/origin/optional.rb:312:in `option'   origin (2.1.1)
> lib/origin/optional.rb:171:in `order_by'   active_admin-sortable_tree
> (0.2.0) lib/active_admin/views/index_as_sortable.rb:139:in `block (2
> levels) in build_nested_item'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:31:in `block in build_tag'  
> arbre (1.0.3) lib/arbre/context.rb:92:in `with_current_arbre_element' 
> arbre (1.0.3) lib/arbre/element/builder_methods.rb:49:in
> `with_current_arbre_element'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:26:in `build_tag'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:39:in `insert_tag'   arbre
> (1.0.3) lib/arbre/element/builder_methods.rb:14:in `ol'  
> active_admin-sortable_tree (0.2.0)
> lib/active_admin/views/index_as_sortable.rb:138:in `block in
> build_nested_item'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:31:in `block in build_tag'  
> arbre (1.0.3) lib/arbre/context.rb:92:in `with_current_arbre_element' 
> arbre (1.0.3) lib/arbre/element/builder_methods.rb:49:in
> `with_current_arbre_element'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:26:in `build_tag'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:39:in `insert_tag'   arbre
> (1.0.3) lib/arbre/element/builder_methods.rb:14:in `li'  
> active_admin-sortable_tree (0.2.0)
> lib/active_admin/views/index_as_sortable.rb:117:in `build_nested_item'
> active_admin-sortable_tree (0.2.0)
> lib/active_admin/views/index_as_sortable.rb:86:in `block (2 levels) in
> build_list'   active_admin-sortable_tree (0.2.0)
> lib/active_admin/views/index_as_sortable.rb:85:in `each'  
> active_admin-sortable_tree (0.2.0)
> lib/active_admin/views/index_as_sortable.rb:85:in `block in
> build_list'   arbre (1.0.3) lib/arbre/element/builder_methods.rb:31:in
> `block in build_tag'   arbre (1.0.3) lib/arbre/context.rb:92:in
> `with_current_arbre_element'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:49:in
> `with_current_arbre_element'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:26:in `build_tag'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:39:in `insert_tag'   arbre
> (1.0.3) lib/arbre/element/builder_methods.rb:14:in `ol'  
> active_admin-sortable_tree (0.2.0)
> lib/active_admin/views/index_as_sortable.rb:84:in `build_list'  
> active_admin-sortable_tree (0.2.0)
> lib/active_admin/views/index_as_sortable.rb:23:in `build'   arbre
> (1.0.3) lib/arbre/element/builder_methods.rb:30:in `block in
> build_tag'   arbre (1.0.3) lib/arbre/context.rb:92:in
> `with_current_arbre_element'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:49:in
> `with_current_arbre_element'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:26:in `build_tag'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:39:in `insert_tag'  
> /usr/local/rvm/gems/ruby-2.1.5@rails4/bundler/gems/active_admin-2e5e954bc9b1/lib/active_admin/views/pages/index.rb:139:in
> `block (2 levels) in render_index'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:31:in `block in build_tag'  
> arbre (1.0.3) lib/arbre/context.rb:92:in `with_current_arbre_element' 
> arbre (1.0.3) lib/arbre/element/builder_methods.rb:49:in
> `with_current_arbre_element'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:26:in `build_tag'   arbre (1.0.3)
> lib/arbre/element/builder_methods.rb:39:in `insert_tag'   arbre
> (1.0.3) lib/arbre/element/builder_methods.rb:14:in `div'  
> /usr/local/rvm/gems/ruby-2.1.5@rails4/bundler/gems/active_admin-2e5e954bc9b1/lib/active_admin/views/pages/index.rb:138:in
> `block in render_index'   ar

The offender here is active_admin-sortable tree. 这里的罪犯是active_admin-sortable树。 It is assuming you are using ActiveRecord and does not comply with Mongoid's sorting syntax. 假设您使用的是ActiveRecord,并且不符合Mongoid的排序语法。

In Mongoid you must specify the direction of the sort, either 1 or -1 for ascending or descending. 在Mongoid中,您必须指定排序的方向,1或-1表示升序或降序。 This is because MongoDB's query syntax has no assumptions for the direction of the sort if no direction is provided, unlike SQL which assumes ascending if none is given. 这是因为如果没有提供方向,MongoDB的查询语法没有对排序方向的假设,这与SQL假定如果没有给出提升那么假设。

So when the gem calls order here: 所以当宝石在这里调用order

https://github.com/zorab47/activeadmin-sortable-tree/blob/0b78ebffb2e4b702bde99c93fb29b6475504fefc/lib/active_admin/views/index_as_sortable.rb#L139 https://github.com/zorab47/activeadmin-sortable-tree/blob/0b78ebffb2e4b702bde99c93fb29b6475504fefc/lib/active_admin/views/index_as_sortable.rb#L139

it's not providing a direction. 它没有提供方向。 If it were to do so like so: 如果是这样的话:

item.send(options[:children_method]).order(options[:sorting_attribute] => :asc).each do |c|

Then it would be compatible with both, at least only in this case . 然后它将与两者兼容,至少仅在这种情况下 I am not sure what other issues there would be with that gem. 我不确定那个宝石会有什么其他问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM