質問

ルートを想定

map.resources :articles

どうやってこれを手に入れますか

/articles?most_popular

link_to メソッドを使用していますか?

次のことを試しました:

link_to articles_path(:most_popular) # exception
link_to articles_path(:most_popular => nil) # /articles
link_to articles_path(:most_popular => true) # /articles?most_popular=true

注: has_scope inherited_resources を使用しています>

役に立ちましたか?

解決

パラメーターに値を追加しない場合、W3C標準を尊重しません。これにより、paramsセクションの形式は field = value になります。

代わりに、記事コントローラーに新しい:most_popularアクションを追加することをお勧めします。

routes.rbで:

map.resources :articles, :collection => {:most_popular=>:get}

コントローラー上:

class ArticlesController < ApplicationController
...
def most_popular
  @articles = ...
end

ビューについて:

link_to most_popular_articles_path() # /articles/most_popular

これはHTML準拠であり、URLは実質的に同じに見え(1つずつ?を1つずつ変更します)、コントローラーは簡素化されます(インデックスからmost_popularアクションが分離されます)。

よろしく!

更新(2017):W3C規格は field = value 構文を義務付けていないようです(またはそれ以上義務付けていません)。ただし、一部のサーバーは「チョーク」に記載されています。この構文に準拠していないクエリの場合。 を参照してください。値なし?詳細については。

他のヒント

最後の例:

link_to articles_path(:most_popular => true) # /articles?most_popular=true

は正しい方法です。それ以外の場合は、手動でリンクを作成できます。

<a href="<%= articles_path %>?most_popular">articles</a>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top