2016-09-14 51 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以查看是否存在位置(以及其他任何你关心的属性),然后在视图中的条件中使用它。

相关问题