0

私のアプリケーションはそれで構成されCategoryていhas_many productsます。カテゴリだけでなく、製品にも発行日があります。

カテゴリの表示ページには、そのカテゴリの製品が表示されます。

Category_controller の show および index アクションは非常に単純です (published はスコープです)。

def index
    @categories = Category.published
end

def show
    @categories = Category.find(params[:id])
    unless @categories.datepublication <= Time.now
        redirect_to categories_path
    end
end

ご覧のとおり、公開されたカテゴリが表示され、自分自身のためにあまりにも興味がある場合は、カテゴリ インデックスにリダイレクトされます。

ここで、カテゴリーのショービューに公開された製品のみを表示するのは素晴らしいことです。ビュー内の if を除いてそれを行う方法はわかりませんが、要素をフィルタリングすることはビューの仕事ではないように思えます。ネストされた要素をフィルタリングする正しい MVC の方法は何ですか?

4

2 に答える 2

1

アソシエーションを介しても、スコープをチェーンできます。あなたの例から、あなたのカテゴリーには発行日があると思いますが、あなたの製品にも独自の発行日がありますよね?

その場合、カテゴリにあるものと同様のスコープを製品に設定し、同じように使用できます。つまり、次のようになります。

@products = @category.products.published

次に、 @products インスタンス変数をコントローラーにプリロードするか、ビューで @category.products.published を使用するかはあなた次第です。アプリケーションが十分に単純な場合、私は通常、自分でビュー内のスコープ クエリを使用します。

于 2012-10-02T15:45:29.620 に答える
1

これはORMの仕事です(カテゴリも)

 begin
   @category = Category.published.find(params[:id])
 rescue ActiveRecord::RecordNotFound
   redirect_to categories_path unless @category
 end

 @products = @category.products.published
于 2012-10-02T15:45:43.763 に答える