3

ルートを想定

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

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

4

3 に答える 3

3

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

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

あなたの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構文を義務付けていないようです(またはそれ以上義務付けていません)。ただし、一部のサーバーは、この構文に準拠していないクエリで「チョーク」するように文書化されています。値がない場合、URLクエリパラメータは有効ですか?を参照してください。詳細については。

于 2009-11-30T08:56:30.777 に答える
1

あなたが持っている最後の例:

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

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

<a href="<%= articles_path %>?most_popular">articles</a>
于 2009-11-29T17:00:00.323 に答える
0

https://stackoverflow.com/a/4557763/803804を参照してください

?key=value仕様はフォーマットを義務付けておらず、実際?keyには問題ありません。

さらに、Rails(およびほとんどのフレームワーク)がそれを処理します。

Railsの場合、これを次のようなパラメータに変換します{ 'key' => nil }

残念ながら、値がnilのパラメータをrails urlヘルパーに渡すと、そのパラメータがクエリ文字列に追加されないため、これを行う唯一の方法は次のとおりです。articles_path + "?most_popular"

于 2020-07-25T08:13:55.053 に答える