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
- 后人
- 子树