Ruby on rails 为类-Rails调用私有方法select

Ruby on rails 为类-Rails调用私有方法select,ruby-on-rails,ruby,methods,controller,Ruby On Rails,Ruby,Methods,Controller,我的控制器中有以下代码: 数组=联系人。选择:name.distinct 其思想是,这将创建一个包含所有联系人模型的数组,其中包含一个唯一的:name属性。但是,它抛出了以下错误: 为Contact:类调用了NoMethodError私有方法“select” 这里的误解是什么?值得一提的是,调用这行代码的方法在控制器中没有定义为私有的 编辑: 以下是实际代码: 控制器 根据您的错误消息,我非常确定您的模型不是ActiveRecord对象 如果您想使用ActiveRecordselect,请像这样

我的控制器中有以下代码:

数组=联系人。选择:name.distinct

其思想是,这将创建一个包含所有联系人模型的数组,其中包含一个唯一的:name属性。但是,它抛出了以下错误:

为Contact:类调用了NoMethodError私有方法“select”

这里的误解是什么?值得一提的是,调用这行代码的方法在控制器中没有定义为私有的

编辑: 以下是实际代码:

控制器
根据您的错误消息,我非常确定您的模型不是ActiveRecord对象

如果您想使用ActiveRecordselect,请像这样定义您的模型

class Contact < ActiveRecord::Base

您还需要在数据库中定义属性,而不是通过属性读取器通过ActiveRecord访问属性。请参见

您似乎正在使用旧版本的Rails,特别是2.3.0版。在这里,select方法在ActiveRecord模型类上确实是私有的,因为它是从内核模块继承的,内核模块是每个Ruby对象的一部分,具有完全不同的用途,因此不打算像在Rails 3和Rails 4中那样使用它

在Rails 2.3中,您可以使用以下语法获得类似的结果:

Contact.all(:select => "DISTINCT name")

这将返回一个只设置了name属性的联系人数组。

FWIW:Rails API引用说明了这个确切用法,例如:您编写的控件中没有将其定义为private,您是指model吗?不,我的意思是该方法本身不是private方法。但是,我的模型属性也不是私有的。请尝试Contact.all.select:Name您的类是ActiveRecord对象吗?如果Arjan是正确的,可能有助于进一步解释错误。这样做了…谢谢您的额外解释,请继续学习。@Luigi如果您要粘贴错误的完整堆栈跟踪,这会立即变得更清楚。
class Contact < ActiveRecord::Base
Contact.all(:select => "DISTINCT name")