我们假设我有这个简单的搜索表单:
<%= form_tag invoices_path, :method => 'get' do %>
<%= text_field_tag :number %>
<%= text_field_tag :date %>
<%= text_field_tag :total %>
...
<%= submit_tag %>
<% end %>
这是我的控制者:
class InvoicesController < ApplicationController
def index
@invoices = current_user.invoices.search(params)
end
...
end
如何从params
哈希中省略某些参数,例如total
?
我尝试了类似params.except(:total)
的内容,但这并未改变任何内容。
我不希望将total
发送到search
函数,我也不希望它出现在网址中。
如何做到这一点?
感谢您的帮助。
答案 0 :(得分:1)
刚做
params.except(:total)
不会更改params散列,它只返回一个更改的散列。你可以用“爆炸”来做到这一点。像
params.except!(:total)
但是不建议更改params散列,因为其他操作可能依赖于它。
所以这就是你的选择。
filter = params.except(:total)
@invoices = current_user.invoices.search(filter)
答案 1 :(得分:1)
params是一个哈希,所以我认为你可以做到这一点。你能试试吗?
params.delete(:total)
@invoices = current_user.invoices.search(params)
答案 2 :(得分:1)
如果输入内容包含在表单中,除非您采取特殊措施,否则它将随表单一起提交。当你在服务器上进入Rails代码时,为时已晚。
一种方法是在提交表单之前立即禁用该元素:
在您的输入中添加never-submit
课程:
<%= text_field_tag :total, '', :class => 'never-submit' %>
然后在提交表单之前使用jQuery禁用该类的任何元素:
$(document).ready(function() {
$('form').submit(function() {
$('.never-submit').prop('disabled', true);
return true;
});
});
您还可以考虑将该字段设为input
以外的字段。输入旨在允许用户向您的服务器提交数据。如果那不是该字段的意图,那么span
(样式看起来像input
)可能更合适。