Ruby on rails Rails基础-计算最常用的值

Ruby on rails Rails基础-计算最常用的值,ruby-on-rails,Ruby On Rails,一个小部件有一种类型,而这个类型有许多小部件。我想统计一下哪些类型是最常分配给我的小部件的(使用最多的3种) 实现这一目标的最佳方式是什么 我构建数据库的方式是,widgets表有一个type_id,在创建widget时由select指定 我想象这将是我在widget.rb模型中定义的一种方法,因为我需要收集所有的widget,然后再计算类型,如果愿意的话,给它们一个“分数” 我想知道是否有更简单的方法来确定哪些类型最常用-我的目标是从模型中的方法返回它们,该方法创建为数组并分配给控制器中的变量

一个小部件有一种类型,而这个类型有许多小部件。我想统计一下哪些类型是最常分配给我的小部件的(使用最多的3种)

实现这一目标的最佳方式是什么

我构建数据库的方式是,widgets表有一个type_id,在创建widget时由select指定

我想象这将是我在widget.rb模型中定义的一种方法,因为我需要收集所有的widget,然后再计算类型,如果愿意的话,给它们一个“分数”

我想知道是否有更简单的方法来确定哪些类型最常用-我的目标是从模型中的方法返回它们,该方法创建为数组并分配给控制器中的变量


查看它们只需调用数组的前三个值就可以获得前三名。

我认为您的小部件应该键入,因为小部件表将是保存类型id的表。接下来,我建议使用Rails(向下滚动到选项)

首先,您将运行如下迁移:

class AddTypesWidgetsCount < ActiveRecord::Migration
  def self.up
    change_table :types do |t|
      t.integer :widgets_count
    end
  end

  def self.down
    change_table :types do |t|
      t.remove :widgets_count
    end
  end
end
之后,您可以创建一个范围,该范围按
小部件\u count
对类型进行排序。您的类型模型可能类似于:

class Widget < ActiveRecord::Base
  has_many :widgets
  named_scope :top_three, :order => 'widgets_count DESC', :limit => 3
end
class小部件widgets\u count DESC',:limit=>3
结束

然后,您可以调用
Type.top\u three
以通过小部件计数获得前三种类型。或者,如果没有指定的作用域,您可以调用类似
Type.find(:order=>'widgets\u count DESC',:limit=>3)
,但是指定的作用域将允许链接。

我认为您的小部件应该键入,因为小部件表将是保存类型id的表。接下来,我建议使用Rails(向下滚动到选项)

首先,您将运行如下迁移:

class AddTypesWidgetsCount < ActiveRecord::Migration
  def self.up
    change_table :types do |t|
      t.integer :widgets_count
    end
  end

  def self.down
    change_table :types do |t|
      t.remove :widgets_count
    end
  end
end
之后,您可以创建一个范围,该范围按
小部件\u count
对类型进行排序。您的类型模型可能类似于:

class Widget < ActiveRecord::Base
  has_many :widgets
  named_scope :top_three, :order => 'widgets_count DESC', :limit => 3
end
class小部件widgets\u count DESC',:limit=>3
结束

然后,您可以调用
Type.top\u three
以通过小部件计数获得前三种类型。或者,如果没有指定的作用域,您可以调用类似于
Type.find(:order=>'widgets\u count DESC',:limit=>3)
,但是指定的作用域将允许链接。

啊,感谢您指出这一点。我必须记住:has_one和:belling_to与具有该_id字段的区别。我不知道计数器缓存的事!从你的描述来看,它看起来会起作用。谢谢你的提示,我马上去上班。:)更新:哇,像一个迷人的作品,很容易!我喜欢我可以在很多地方为我的用户实现这一点。再次感谢你,本杰明。我希望你周末过得愉快。啊,谢谢你指出这一点。我必须记住:has_one和:belling_to与具有该_id字段的区别。我不知道计数器缓存的事!从你的描述来看,它看起来会起作用。谢谢你的提示,我马上去上班。:)更新:哇,像一个迷人的作品,很容易!我喜欢我可以在很多地方为我的用户实现这一点。再次感谢你,本杰明。我希望你周末过得愉快。