2016-11-21 9 views
1

カテゴリのリストに特定のカテゴリを持つすべての記事を表示する際の問題?カテゴリのリストに特定のカテゴリを持つすべての記事を表示する際の問題?

Articles 
has_and_belongs_to_many Categories 

Categories 
has_and_belongs_to_many Articles 

class CreateJoinTableArticleCategory < ActiveRecord::Migration 
    def change 
    create_join_table :articles, :categories do |t| 
     # t.index [:article_id, :category_id] 
     # t.index [:category_id, :article_id] 
    end 
    end 
end 

モデルと移行罰金です、播種はレールコンソールの細かい情報が細かいですが、コントローラーに私はURLから取得する特定のカテゴリのすべての記事を示す問題を抱えている:

class CategoriesController < ApplicationController 

     def show 
     @user = current_user 
     @categories = Category.all 
     @category = Category.friendly.find(params[:slug]) 

     #@a = Article.where(category_id: @category, published: true) 
     #@a = Article.left_outer_joins(:categories).where("categories.category_id = @category") 
     #@a = Article.joins("LEFT JOIN articles_categories ON category.id = articles_categories.id") 
     #@a = Article.includes(:categories).where(@category) 


     @q = Question.where(category_id: @category, published: true) 
     @articles = (@q + @a).sort_by(&:created_at).reverse.paginate(page: params[:page], per_page: 4) 
     end 

    end 

答えて

0

I "。フレンドリー"(なぜそれを使用していますか)に精通していませんが、あなたはそれだけで1つのカテゴリを得ることは確実ですか?もしそうなら、あなたの最初の@aは動作するはずですか、簡単にバージョン

@category.articles.where(published: true) 

は、あなたはそれをテストするために@qせずに、それを試してみました。問題の唯一の原因がわかります。

PS:コードのパフォーマンスに大きな問題があります。まず、すべてのカテゴリをロードし、その後、1カテゴリのすべての記事と質問を読み込み、Rubyでソートしてページネーションの利点を完全に無効にします。

0

あなたのニーズに合わせて少し周りの変更時に明らかに私はあなたのデータが構成されているかを正確に知りませんが、これは動作するはずです。

Articles.includes(:categories).where('category.name = ?', 'category_name').references(:categories) 
0

これを試してみてください:

@category = Category.friendly.find(params[:slug]) 
@category.articles.published 

がスコープスコープ作成Articleモデルでは、物品のモデル

に作成され、公開:

scope :published, -> { where(published: true) } 
関連する問題