如何通过GET发送表单时忽略某些参数?

时间:2014-08-01 21:21:41

标签: ruby-on-rails ruby

我们假设我有这个简单的搜索表单:

<%= 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函数,我也不希望它出现在网址中。

如何做到这一点?

感谢您的帮助。

3 个答案:

答案 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)可能更合适。