0

我无法让此方法与 heroku 一起使用,当我尝试加载页面时,我收到了上述错误消息。我在之前的帖子中得到了一些帮助,但似乎重构没有奏效。从我读过的内容来看,我需要在搜索和组中包含模型的所有列。这是正确的吗?方法和架构如下

方法

def self.popular_recipes
  select('recipes.*, count(*) AS dish_count').
  group('dish_name').
  order('dish_count DESC')
 end

架构

create_table "recipes", :force => true do |t|
t.string   "dish_name"
t.string   "difficulty"
t.text     "preperation_time"
t.datetime "created_at",          :null => false
t.datetime "updated_at",          :null => false
t.integer  "user_id"
t.string   "avatar_file_name"
t.string   "avatar_content_type"
t.integer  "avatar_file_size"
t.datetime "avatar_updated_at"
t.integer  "country_id"
t.string   "category"
t.text     "description"
end
4

1 回答 1

1

问题是您正在选择recipes.*哪个混淆 PostgreSQL。

recipes假设您在一个包含 500 条记录的表中有 10 个唯一的菜名。一个GROUP BY dish_name子句将只返回 10 行。因此,如果您要求recipes.*,Postgres 应该如何知道如何填写 10 行的其他列?

改为这样做:

def self.popular_recipes
  select('dish_name, count(*) AS dish_count').
  group('dish_name').
  order('dish_count DESC')
 end

请注意,MySQL 在这种情况下的行为不同(没有错误),并且会为每个返回dish_name一行,但本质上是未定义的行。

于 2012-12-15T02:42:05.277 回答