2012-01-16 31 views
0

我使用的祖先宝石和我正在一个undefined method "arrange" for #<Array:0x007f8d58e58700>错误与下面的代码:祖先宝石“未定义的方法”的错误

<%= @shipmgr_carriers.arrange(:order => :name) %> 

然而,当我只输出@shipmgr_carriers我得到一个数组与祖先:

[#<Shipmgr::Carrier id: 9, name: "testing", status: nil, created_at: "2012-01-16 22:44:28", updated_at: "2012-01-16 22:44:28", ancestry: nil>, #<Shipmgr::Carrier id: 10, name: "test", status: nil, created_at: "2012-01-16 22:44:28", updated_at: "2012-01-16 22:44:28", ancestry: "9">] 

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

回答

1

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

我假设你在你的控制器是这样的声明@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到达您的看法该查询已经运行,将其转换为结果数组而不是关系。

这是逻辑,应该可能在控制器中完成,所以无论如何将它移出视图都是一个好主意。

0

arrange()方法既可以在类级别上执行,也可以在命名范围内执行,而不是在返回的值数组上执行。例如,如果你想打电话安排()上一个名为“活动”表,这会工作,并以排列格式返回整个表:

Activity.arrange 

不过,如果你想打电话安排在特定的树你会去:

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

'子树'是由has_ancestry gem提供的命名范围。因此,安排()方法应该为以下命名范围工作:

  • 祖先
  • 孩子
  • sibblings
  • 后裔
相关问题