2012-08-07 47 views
0

所以我有一个非常简单的模型叫做Movies。我正在尝试添加一个类方法,该方法返回分配给数据库中影片的评分的整齐列表。看来我想打电话给Movie.uniq.pluck(:rating)RoR ActiveRecord :: Base uniq undefined当试图uniq.pluck(:column_name)

所以我添加的方法,像这样:

class Movie < ActiveRecord::Base 

    def self.all_ratings 
     self.uniq.pluck(:rating) 
    end 

end 

,但它只是不工作。当它运行时,我得到:undefined method uniq'for#`...我尝试过包括ActiveRecord :: Calculations,但似乎也没有帮助。我也在'def ...'后面加入了一个断点来检查自己的方法和确切的方法,uniq不在其中... ...

我明显在做错事,但我没有相当了解它是什么。

任何人有任何想法?

ó_ò 
+2

您使用的是哪种版本的导轨? (如果我的记忆是正确的,则在3.2.1中添加了uniq) – 2012-08-07 13:33:01

+0

ahhhh ..... 3.1.0 – BigglesB 2012-08-07 13:41:14

+0

那么,那将会回答。谢谢:) – BigglesB 2012-08-07 13:41:29

回答

1

uniq是一种Ruby方法,甚至可用于1.8.7。问题是uniqArray方法。

因此,您可能需要致电uniq,如Movie.all

+0

是的,但在最近的Rails文档中,ActiveRecord :: Calculations.uniq.pluck(:column_name)已被很好地定义。我没有考虑到它比我使用的版本更新,因此2天头痛。当然,如你所建议的,还有更多冗长的方法来做同样的事情。 – BigglesB 2012-08-10 07:07:45

+0

我实际上能够在Rails 5.0.1的类上使用uniq,但它不再适用于5.1.2,并且必须将.all方法添加到我的类中。谢谢! – fatfrog 2017-07-12 04:21:57

0

uniq是一种数组方法。当你把self.uniqself.all_ratings,自我指的是电影类,它不会指向任何集合

所以首先获取集合,只要你想

result = Movie.all 

(or) 

result = Movie.where({}) 

,然后使用uniq的方法,结果

相关问题