Rails:link_toに値のないパラメーターを指定する
-
08-07-2019 - |
質問
ルートを想定
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
解決
パラメーターに値を追加しない場合、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>
所属していません StackOverflow