将所有输入作为单个参数传递

时间:2013-08-29 11:43:29

标签: ruby-on-rails ruby-on-rails-3

我创建了一个搜索表单

<%= form_tag url_for(:action => "index") do %>
    <%= text_field_tag 'fromdate' %>
    <%= text_field_tag 'todate' %>
    <%= submit_tag 'Search' %>
<% end %>

我需要将所有这些值作为控制器中的单个参数传递给模型。这是我的控制器

def index
    @client = Customer.search
    #something like this @client = Customer.search(as_single_params)
    respond_to do |format|
        format.html
    end
  end

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以在视图中执行此操作:

<%= text_field_tag "some_fields[]" %>
<%= text_field_tag "some_fields[]" %>
<%= text_field_tag "some_fields[]" %>

然后在您的控制器中使用以下方法检索值:

some_fields = params[:some_fields] # this is an array

如果将值作为键传递,Rails会给你一个哈希:

<%= text_field_tag "some_fields[fromdate]" %>
<%= text_field_tag "some_fields[todate]" %>

在您的控制器中,您现在可以执行此操作:

@clients = Customer.search(params[:some_fields])
       ^

我向s添加了@client,因为您可能有多个符合条件的客户。

答案 1 :(得分:0)

提交表单时,您选择的所有参数都将以params哈希值传递给控制器​​。例如,params[:fromdate]params[:todate]

在您的控制器中,如果您的params哈希仅包含您要搜索的Customer个字段(即表单只定义了Customer个字段,那么您可以这样做:

def index
  @clients = Customer.where(params)
  respond_to do |format|
    format.html
  end
end

请注意,我显示@clients,因为where将返回一个集合。你可以选择第一个(特别是如果你确定只有一个):

@client = Customer.where(params).try(:first)