0

「description」フィールドを持つモデル「Product」があります。ここで、インデックスページにリンクを作成します。このリンクをクリックすると、説明が空白(空)のすべての製品が表示されます。

モデルでは、このようなnamed_scopeを定義しました

named_scope :no_description,      :conditions => { :description => "" }

コンソールでProduct.no_description.countを呼び出して、named_scopeが機能することを確認しました。

私の知る限り、コントローラーは「インデックス」アクションのリンクからのフィルター要求を処理することになっていますが、すべての製品を表示するデフォルトとは区別できます。

 def index
    @products = Product.all
    ...

私の問題は、コントローラーに別の要求、ビュー上のリンクのセットアップルート、およびビュー上の実際のリンクを処理させることです。私が自分の問題を説明したことを願っています。

4

2 に答える 2

1

リンクがパラメーターを渡す場合は、それを確認して、インデックス アクションで名前付きスコープを使用できます。

def index
    if params[:no_description]
        @products = Product.no_description
    else
        @products = Product.all
    end
end

ビューでは、次のようなものを使用できます。

link_to('No description', products_path(:no_description => 1))
于 2010-06-17T09:17:51.167 に答える
1

2 つの基本的な方法があります。説明のない商品を表示するための新しいルートとコントローラー アクションを設定するか、ハイパーリンクでクエリ文字列パラメーターを使用して区別することができます。あまりにも多くのアクションでコントローラーが乱雑になるのを避けるために、2 番目のアプローチを使用します。

RESTful ルーティングを使用していると仮定すると、リンクは次のようになります。

<%= link_to 'Products Without Descriptions', products_path(:filter => true) %>

そして、これがコントローラーのアクションです。これは単純にパラメーターの存在を探します (つまり、パラメーターの値は気にしません)。

def index
  if params[:filter]
    @products = Product.no_description
  else
    @products = Product.all
  end
  ...
end
于 2010-06-17T09:25:28.107 に答える