我必须通过访问,评论创建top100照片的页面......但我不知道如何制作它。请有人帮帮我:)
错误:
undefined method `Visit' for <Photo::ActiveRecord
photos_controller
....
def top100
@photos = Photo.all
@photos.visit.count(limit: 10)
end
路由
get 'photos/top100'
架构
create_table "visits", force: true do |t|
t.integer "photo_id"
t.integer "user_id"
t.integer "count", default: 0
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "photos", force: true do |t|
t.string "name"
t.text "description"
t.integer "user_id"
t.string "image"
t.string "tags"
t.string "camera"
t.string "lens"
t.hstore "settings"
t.integer "im_rating", default: 0
t.integer "im_visits", default: 0
t.integer "im_votes", default: 0
t.boolean "is_ban_comments", default: false
t.datetime "created_at"
t.datetime "updated_at"
end
photo.rb
has_many :visits, dependent: :destroy
visit.rb
belongs_to :photo
belongs_to :user
答案 0 :(得分:-2)
使用SQL分组和排序:
# Top photos by visits
@top_photos = Visit.select("photo_id, COUNT(*) AS visit_count").includes(:photo).group(:photo_id).order("visit_count DESC").map(&:photo)
有关按SQL排序的更多信息:SQL Order By Count
注意#includes(:photo)
- 这样,以下#map(&:photo)
调用不会产生N个查询(只需一个查询就可以获取所有查询)。
此外,您似乎没有在模型中指定关系,因此请将此行添加到visit.rb
:
belongs_to :photo
此行到photo.rb
has_many :visits
你已经把它们放在那里了。