我无法使用此方法与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
答案 0 :(得分:1)
问题是你选择的recipes.*
混淆了PostgreSQL。
假设您在recipes
表中有10个唯一的dish_names,其中包含500条记录。 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
返回一行,但是哪一行基本上是未定义的。