2017-03-15 94 views
1

我使用Rails 5在我的应用程序,并为的link_to在下面找到我的代码,并使用will_paginate,Rails的5试图生成非消毒请求的URL参数

<%=link_to text, params.merge({controller: controller, action: action, page: 1, 
    order_field: field, order_dir: dir}) %> 

上面的代码如下抛错误

Attempting to generate a URL from non-sanitized request parameters! An attacker can inject malicious data into the generated URL, such as changing the host.

即使我尝试使用如下许可证和避免上述错误,

<%=link_to text, params.permit!(page: 1).merge({controller: controller, action: action, 
    order_field: field, order_dir: dir}) %> 

但是,这在圈通过如下RSpec的我提出问题,

Failure/Error: render ActionView::Template::Error: undefined method permit!' for {:show_aliases=>"true"}:Hash # ./app/views/shared/_sort_column.html.erb:10:in _app_views_shared__sort_column_html_erb___3232147907220672307_98274920'

为解决类似的问题的任何帮助。

+0

尝试生成该散列'params.permit(页面:1)!.merge({控制器:控制器,动作:动作, order_field:场,order_dir:dir})'在控制器内部,然后在视图中使用它。 –

+0

有没有你的控制器没有这样做的原因?这似乎违反了MVC模式,因为视图不应该关心参数强度,控制器应该是。如果您可以在控制器中保留这些类型的问题,您的应用代码将更加直接地维护。 –

回答

0

尝试使用params.permit(不感叹号):

<%=link_to text, params.permit(page: 1).merge({controller: controller, action: action, 
order_field: field, order_dir: dir}) %>