質問

私は、ネストされたルートの代わりに、通常のポスト変数へのリンクにページ付けます取得しようとしています。私はページ付け、いくつかのparamsを渡すようになってるけど、私はそれらを渡す方法がわからない知っています。

は基本的に@postsに格納された配列があると、他のparamのpaginateであるへのアクセスを有するcategory_id

は、ネストされたルートは/category/1/postsですが、意志のpaginate上の次と前を打つことは、このposts?page=1&category_id=7のようなURLを返します。

 <%= will_paginate @most_recent_posts "What do I do here?" %>
<時間>

このはヤニスの答えの結果である。

あなたが行うことができますあなたのコントローラには、

@posts = @category.posts.paginate

そして、あなたのビューでます:

<%= will_paginate(@post) %>

これを行うと、次のURL

を思い付きます
posts?page=2&post_category_id=athlete_management
<時間>

routes.rbを#there以上のルートですが、これらは関連するものです。

map.resources :posts
map.resources :post_categories, :has_many => :posts

ソリューション

 map.resources :post_categories do |post_category|
   post_category.resources :posts
  end
  map.resources :posts 

ブロックの後にリソースを宣言するために持っていた。

おかげスティーブン!

役に立ちましたか?

解決

パラシュートがここでこの古い問題にして、私は同じ問題が発生したため。

私はかなり正確に同じ問題を抱えていました。私は何かのファンキーは、ルートで起こっていたことを応答の助言に従いました。私はルートに掘って(あなたの状況に合わせて翻訳された)を見つけます:

resources :posts
resources :categories do
  resources :posts
end

このそれはそう呼び出しcategory_posts_pathが返されていること(予想通り)/category/1/posts作られています。

しかし、それはそのwill_paginateパラメータに一致する最初のルートを見つけるために、ルートから「後方」作品似ているがurl_forというものを、呼び出す実現するために極めて重要であります。

は、ネストされたルート上のresources :postsが現れるので、それは1つの満たす要件とちょうどcategory_id=1挿入し、クエリ文字列であったことをことを見ています。

彼らは別に、スタンドアロンのリソースとしてリストされているネストされたリソースを持っていなかったので、

それは皆のために、「箱から出して」働いていた理由だった。

を削除し、あなたは大丈夫でなければならないこと!

他のヒント

あなたが行うことができますあなたのコントローラには、

@posts = @category.posts.paginate

そして、あなたのビューでます:

<%= will_paginate(@post) %>

わかりましたので、それは正確に質問から明らかではないが、私はあなたが/postsのような特定のカテゴリのページに/category/1/postsのようなルートレベルのURLから行くしようとしていることを仮定しています。

will_paginateが特別なのparamsなし罰金に動作します私は(でも名前空間に)ネストされたルートを持っているので、これがあると仮定し、

理由。それ以外の場合は、あなたのルートとより多くの情報を持つに行く何か他のファンキーなデバッグに必要となるでしょうがあります。

しかし、私は少なくとも、どのようにwill_paginate作品を説明することができます。それはページのURLを生成していますと、それは、既存のparamsプラス必要な特定のページでurl_forを呼び出します。あなたは既に設定されているのparamsの束を持っている場合ので、それはパス自体の一部であるものも含めて、それらを保存する必要があります。幸いにもそれはまた、あなたがwill_paginateへ(驚き!):paramsパラメータとにマージする追加のparamsを渡すことができます。

これが正しく設定ネストされたルートを持っていると仮定すると、/category/1/postsはによって生成することができます:

url_for(:controller => 'posts', 
        :category_id => '1')

しかし、あなたはページ/posts上にある場合、その後のparamsのみとなります:

{:controller => 'posts'}

あなたがそうのようwill_paginateにCATEGORY_IDを渡す必要がありますのでます:

<%= will_paginate @posts, :params => {:category_id => @posts.first.category_id} %>

これは仕事、あなたのルートと、その後I容疑者何か間違っていない場合。テンプレートにデバッグ文を入れてみてくださいとのparamsの異なる順列でurl_forを呼び出します。ルート定義の順序が重要と競合を作成することができることを覚えています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top