获取所有记录之间最常见的列值

时间:2017-12-22 12:46:27

标签: ruby-on-rails activerecord rails-activerecord

我试图从数据库中返回最常见的文本值(国家/地区)。

虽然我的第一次尝试没有产生任何错误,但我怀疑它没有返回最常见的值:

@mostpopularroast = Roast.group(:id).order("count(country) DESC").first

有趣的是,如果我使用ASC,它会给我完全相同的结果。

因此我现在尝试使用此similar question

的解决方案
@mostpopularroast = Roast.group('country').order('count(*)').limit(1).pluck(:country).first

但这给了我错误undefined method 'country' for "Country 1":StringCountry 1是数据库中的值。

我的模特

class CreateRoasts < ActiveRecord::Migration[5.1]
  def change
    create_table :roasts do |t|
      t.string :roaster
      t.string :name
      t.string :country
      t.string :region
      t.string :bestfor
      t.string :beans
      t.string :roast
      t.string :slug


      t.timestamps
    end
  end
end

1 个答案:

答案 0 :(得分:1)

您应该应用降序排序来获得最受欢迎的#include <iostream> template<typename T> T adder(T first) { return first; } template<typename T, typename... Args> T adder(T first, Args... args) { return first + adder(args...); } int main() { const int c = adder(1, 8, 4); std::cout << c << '\n'; return 0; }

country

您的初始错误与此无关,只是您正在使用Roast.group(:country).select(:country).order("count(*) desc").first.country ,它返回pluck个对象,然后您在其上调用Array方法并获取{{ 1}} object,它是已经是最受欢迎的烤国名称的对象,但是你试图在其上调用first,这会导致异常。