【问题标题】:RoR ActiveRecord::Base uniq undefined when trying to uniq.pluck(:column_name)尝试 uniq.pluck(:column_name) 时,RoR ActiveRecord::Base uniq undefined
【发布时间】:2012-08-07 13:28:35
【问题描述】:

所以我有一个非常简单的模型,称为电影。我正在尝试添加一个类方法,该方法返回数据库中分配给电影的评分的整洁列表。看来我想打电话给Movie.uniq.pluck(:rating)

所以我添加了这样的方法:

class Movie < ActiveRecord::Base

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

end

但它只是不起作用。当它运行时,我得到:undefined methoduniq' for #`... 我试过包括 ActiveRecord::Calculations 但这似乎也无济于事。我还在 'def...' 后面放了一个断点来检查 self 有哪些方法,果然,uniq 不在其中...

我显然做错了什么,但我只是不太明白它是什么。

有人有什么想法吗?

ó_ò

【问题讨论】:

  • 您使用的是什么版本的导轨? (如果我没记错的话,uniq是在3.2.1中添加的)
  • 这样就可以回答了。谢谢你:)
  • uniq 是一种 Ruby 方法。我认为它的pluck 是最近的。

标签: ruby-on-rails activerecord uniq


【解决方案1】:

uniq 是一种 Ruby 方法,甚至适用于 1.8.7。问题是uniq 是一个Array 方法。

因此,您可能需要通过 Movie.all 之类的方式致电 uniq

【讨论】:

  • 是的,但是在最近的 Rails 文档中,ActiveRecord::Calculations.uniq.pluck(:column_name) 定义良好。我没有考虑到它比我使用的版本更新,因此头痛了 2 天。当然,正如您所建议的,还有更详细的方法可以做同样的事情。
  • 我实际上能够在 Rails 5.0.1 的类上使用 uniq,但它在 5.1.2 中不再有效,必须将 .all 方法添加到我的类中。谢谢!
【解决方案2】:

uniq 是一个数组方法。当你把self.uniq放在self.all_ratings里面时,self指的是Movie类,它不会指向任何集合

所以先随心所欲地获取收藏

result = Movie.all

(or)

result = Movie.where({})

然后对结果使用uniq方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多