Ancestry Gem’未定义方法’错误

我正在使用Ancestry Gem,我得到一个undefined method "arrange" for #错误,使用以下代码:

  :name) %> 

但是,当我输出@shipmgr_carriers我得到一个带有祖先的数组:

 [#, #] 

谁能告诉我为什么我无法在数组变量上调用.arrange方法?

我没有使用过Ancestry,但看起来它将arrange方法添加到ActiveRecord :: Base。 它不会将此方法添加到Array,因此您不应期望它在数组上工作。

我假设你在你的控制器中声明@shipmgr_carriers是这样的:

 class SomeController < ActionController::Base def some_action @shimgr_carriers = SomeModel.find(...).carriers end end 

试试这个:

 def some_action @shipmgr_carriers = SomeModel.find(...).carriers @shipmgr_carriers_arranged = @shipmgr_carriers.arrange(...) end 

我的预感是,当@shipmgr_carriers到达您的视图时,查询已经运行,将其转换为结果数组而不是关系。

无论如何,这可能是在控制器中完成的逻辑,因此将其移出视图是一个好主意,无论如何。

arrange()方法在类级别或命名范围内起作用,而不是在返回的值数组上起作用。 例如,如果要在名为“Activity”的表上调用arrange(),这将起作用并以排列的格式返回整个表:

 Activity.arrange 

但是,如果您想在表格中的特定树上进行安排,您可以:

 Activity.find(...).subtree.arrange 

‘subtree’是has_ancestry gem提供的命名范围。 因此,arrange()方法应该适用于以下命名范围:

  • 祖先
  • 孩子
  • sibblings
  • 后人
  • 子树