2017-05-15 24 views
0

私は、Railsガイドで見つけられるものすべてを試してきました。ここでは、2つのモデルの間のアサーションの数によって数えています。Railsアクティブなレコード数の関連付け

コントローラでの問合せ:

def top_mires 
    @title = "Top Posts" 
    @posts = Post.joins('INNER JOIN favorites ON posts.id = favorites.favorited_id').select('posts.*, COUNT(favorites.favorited_id) AS favorite_count').group('posts.id').order('favorite_count desc').limit(10) 
    render 'favorite_posts/show' 
    end 

モデル:

ポスト:

class Post < ApplicationRecord 
    include PublicActivity::Common 

    acts_as_taggable 

    belongs_to :user 
    has_many :comments 
    has_many :favorites, as: :favorited 

    default_scope -> { order(created_at: :desc) } 

    mount_uploader :picture, PictureUploader 

    validates :user_id, presence: true 
    validates :post_type, presence: true 
    validates :content, presence: true 

お気に入り:

class Favorite < ApplicationRecord 
    include PublicActivity::Model 
    tracked only: [:create], owner: :user, recipient: :favorited 

    belongs_to :favorited, polymorphic: true, counter_cache: :favorite_count 
    belongs_to :user 
end 

しかし、私は戻って、このエラーを取得する:

SQLite3::SQLException: no such column: favorite_count: SELECT COUNT(*) AS count_all, posts.id AS posts_id FROM "posts" INNER JOIN favorites ON posts.id = favorites.favorited_id GROUP BY posts.id ORDER BY "posts"."created_at" DESC, favorite_count desc LIMIT ? 

どのように列がないのですか?私はまた、お気に入りを表示するには、多くの、多くの時間がERB内のポストに数えるが、それはここでは動作しません...

は、

答えて

0

私は先に行って、これを使用してカラムを追加しました:ryan.mcgeary.org/2016/02/05/...をし、それが本当によく働いたと私(私は簡単にするため、ここだけ「posts.id」を使用)の助けをPost.unscoped.order('posts.favorites_count desc').limit(10)

0

をありがとうございました。このエラーはSQLiteのができると言うposts.favorites.countを使用しました'favorite_count列のorder byブロック。あなたが明示的な方法でorder byfavorite_countを書き換えた場合、それは動作します:

Post. 
    joins('INNER JOIN favorites ON posts.id = favorites.favorited_id'). 
    select('posts.*, COUNT(favorites.favorited_id) AS favorite_count'). 
    group('posts.id'). 
    order('COUNT(favorites.favorited_id) desc').limit(10) 
+0

おかげで、これは出しますのSQLです:呼び出すことができます
'SELECT posts.id、COUNT(favorites.favorited_id)から、 "posts" INNER JOINお気に入りON posts.id = favorites.favorited_id GROUP BY posts.id ORDER BY COUNT(favorites.favorited_id)desc LIMIT?
'=>#、#<ポストID:293>、#<ポストID:296 [
] >、#、#、&c'なぜ "post.created_at"でソートされますか?なぜお気に入りにカウントされないのですか? – ETSchmidt

+0

マークダウンについてごめん... – ETSchmidt

+0

デフォルトでは、rubyのprintはカスタム列を 'favorite_count'として表示しません。 ( 'posts。*、COUNT(favorite.favorited_id)AS favorite_count')。グループ( 'posts.id')を選択してください。注文( 'COUNT(favorites.favorited_id)desc')。制限(10); posts.each {| p | puts "id:#{p.id}、favorite_count:#{p.favorite_count}、created_at:#{p.created_at}"} '。 'created_at' orderとcount orderはあなたのデータと同じです。 –

関連する問題