-1

私は単純なブログ サイトを持っており、特定のカテゴリから投稿を取得しようとしています。以下のようにモデルを設定しました。

class Post < ActiveRecord::Base
    has_many :categorizations
    has_many :categories, through: :categorizations

    attr_accessible :author, :description, :title, :photo, :category_ids

    scope :breaking, lambda { |category_ids|
        joins(:categorizations).where('categorizations.category_id' => category_ids)
    }
end


class Category < ActiveRecord::Base
    attr_accessible :name
    has_many :categorizations
    has_many :posts, :through => :categorizations
end

class Categorization < ActiveRecord::Base

    attr_accessible :category_id, :position, :post_id

    belongs_to :post
    belongs_to :category
end

投稿モデルに break というスコープを書きましたが、それをビューでレンダリングする方法がわかりません。また、コントローラーはどのように見え、特定のカテゴリの投稿を取得するためにスコープが壊れていますか?

4

1 に答える 1

1

スコープ宣言を次のように変更します。

scope :breaking, lambda { |category_ids|
    joins(:categorizations).where('categorizations.category_id = ?', category_ids)
}

また

scope :breaking, lambda { |category_ids|
    joins(:categorizations).where(categorizations: { category_id: category_ids })
}

スコープでラムダを使用する代わりに、クラスメソッドを使用します。これは、私にとっては、より読みやすいように見えるためです。さらに、デフォルト値を追加する方が簡単です。

def self.breaking(category_ids)
    joins(:categorizations).where(categorizations: { category_id: category_ids })
end
于 2013-02-09T03:03:45.417 に答える