2016-09-14 5 views
1

次のコード:正しくパラメータがあるかどうか尋ねることはできますか?

<% if params[:country].present? %> 
    <%= link_to 'Clear Filters', users_path %> 
<% end %> 

の作品は、しかし、代わりに私のモデルからそれぞれのparamをリストアップするのif params[any].present?

として上記のコードを書き換えるDRY方法があり、私は成功せず、次のことを試してみました:

if params.present? 
if params.any? 
if params[].present? 
if params[''].present? 
unless params.empty? 
+0

.anyがありますか?メソッド、ルビーの列挙型のために、あなたはそれを試しましたか?、また.empty?うまくいった – aledustet

+1

私は質問を編集しました。これらは機能しません。 –

+0

私はあなたがparam.keysプロパティを使って存在しないことを確認するために必要なすべてのパラメータをチェックする必要があると思います。答えを確認してください – aledustet

答えて

5

のparamsは、ハッシュあるので、あなたは、どのように、それに任意のハッシュ方式を使用することができますか?、またはが空ですか?あなたはどの

<%= link_to_if params.any?, 'Clear Filters', users_path %> 
をparamsはがあるかどうかを知りたい場合は

<%= link_to_if params[:country].present?, 'Clear Filters', users_path %> 

か:とあなたにもキーと値へのアクセスが、レールできるので、あなたの例は次のように可能性があり、条件付きリンクlink_to_ifためのヘルパーをぐるぐるあなたがチェックするのparamsのグループを持っている場合はもちろん

は、また、などコントローラとしてあなたのparams変数の項目があり、いつでも行うことができます:

<%= link_to_if (params.keys & filters).empty?, 'Clear Filters', users_path %> 

これは& operatorの機能です。 フィルタについては、任意のオプションを使用してビューにデータを渡して、コントローラ上のインスタンス変数(推奨されていない、ロジックの一部ではないため)またはヘルパー

(私がいることを好む)モデルの定数あなたはヘルパーにそれを残すことを選択した場合、あなたはそれがあなたのビューウィッヒをレイアウトするを助ける原因、それは理にかなって users_helper に追加することができますは間違いなく、なぜヘルパーです

# helpers/users_helper.rb 
def filters 
    ['country', 'height', 'age'] 
end 

また、これらの値はおそらく別の場所、具体的には使用できます

# models/user.rb 
... 
FILTERS = ['country', 'height', 'age'] 
... 

#your view 
<%= link_to_if (params.keys & User::FILTERS).empty?, 'Clear Filters', users_path %> 
+0

それは動作しません。 OPをご覧ください。 –

+0

あなたは何を達成しようとしていますか?キーを確認して、探しているフィルターを検索できますか? – aledustet

+1

filter_param_symbolsを["country"]に置き換えると、これはうまく動作しますが、メソッドとして動作させることはできません。どのようにセットアップする必要がありますか? –

2

Rails routerはのparamsを構築:あなたは実際に私はあなたがあなたのモデルにそれを置くことができ、それはこのようなことができるよう、それらをフィルタリングするために、モデルの責任であると仮定した値をフィルタするでしょう同盟国、情報要求経路を使用する。追加するパラメータに加えて(form_forから明示的に)、paramsには、ビューのレンダリングに使用されているコントローラとアクションを含むキーも含まれています。あなたがブログを持っているし、パス/articles/1をレンダリングしている場合

たとえば、paramsが含まれます:あなたのparamsは、実際に空ではないので、予想通り

{ 
    controller: "articles", 
    action: "show", 
    id: 1 
} 

のでparams.present?params.any?が実際に働いています。

あなたの質問に答えるには、コードをDRYするためにいくつかの方法があります。 paramsを確認して場所(およびあなたが気にしている他の属性)が存在するかどうかを確認し、それをあなたのビューの条件付きで使用するように書かれたhelper methodを使うことができます。

関連する問題