RoR top100张照片

时间:2015-08-06 11:36:56

标签: ruby-on-rails ruby

我必须通过访问,评论创建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

1 个答案:

答案 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
你已经把它们放在那里了。