2016-09-14 61 views
1

下面的代碼:有沒有可能問是否有任何參數?

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

工作正常,但的而不是從我的模型列出每個參數是有改寫上面的代碼爲if params[any].present?

我曾嘗試沒有成功以下內容的幹法:

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

有一個.any?方法,對於Ruby中的枚舉類型,你有沒有試過?,也是.empty?可以工作 – aledustet

+1

我編輯了這個問題。這些不起作用。 –

+0

我認爲你需要檢查你需要的所有參數,以確保不存在使用param.keys屬性,檢查答案 – aledustet

回答

5

PARAMS是亂碼,所以你可以在其中使用任何散列法,像任何?空?,您可以訪問鍵和值很好,但軌道富人有條件鏈接link_to_if一個幫手讓你的例子可能是這樣的:

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

,或者如果你想知道是否有任何PARAMS

<%= link_to_if params.any?, 'Clear Filters', users_path %> 

當然,也有你的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,但我不能讓它作爲一種方法工作。它應該如何設置? –

2

Rails router建立了PARAMS使用信息請求路徑。除了您添加的參數(明確地來自form_for)之外,params還包含包含正在使用哪個控制器和動作來呈現視圖的鍵。

舉例來說,如果你有一個博客,並繪製路徑/articles/1,則PARAMS將包括:

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

所以params.present?params.any?實際上按預期工作,因爲你的PARAMS實際上不是空的。

要回答你的問題,你可以採取幾種方法來幹你的代碼。你可以使用寫一個helper method來檢查params以查看是否存在位置(以及其他任何你關心的屬性),然後在視圖中的條件中使用它。