2013-08-29 22 views
0

我创建了一个搜索表单传递所有输入为单PARAMS

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

我需要通过我的控制器来模拟所有这些值作为一个PARAMS。这是我的控制器

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

我该怎么做?

+0

您的观点将在'params'散列返回属性您需要从'params'哈希(例如,'params [:fromdate]')拉出属性,并使用'Customer'数据上的这些参数执行合适的查询。有关查询界面的信息,请参阅http://guides.rubyonrails.org/active_record_querying.html。 – lurker

+0

我不清楚你想要什么比'Customer.search(params [:fromdate],params [:todate])更多'' – Shadwell

+0

根据你的'Customer'模型,你也可以简单地传递整个'params '哈希通过:'Customer.search(params)' –

回答

2

您可以在您的视图做到这一点:

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

如果将值作为键,Rails的会给你一个哈希:使用

<%= text_field_tag "some_fields[]" %> 
<%= text_field_tag "some_fields[]" %> 
<%= text_field_tag "some_fields[]" %> 
在你的控制器

然后只需检索值:

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

在你的控制器现在你可以这样做:

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

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

+0

在我的模型中,我使用'fromdate ='2013-08-29'',我的查询是'find_by_sql(“select * from blah where fromdate =#{fromdate}”)''。但我无法从查询中得到它的空的位置我错了 – overflow

+0

尝试'where(“fromdate =?”,fromdate)' –

+0

它我使用像你提到的错误作为错误数量的参数(3对于2)' – overflow

0

当您提交表单时,您选择的所有参数将被传递给控制器​​的params散列。例如,params[:fromdate]params[:todate]

在你的控制,如果你的params散列只包含Customer字段,你希望在搜索(即形式不仅具有Customer域定义,那么你可以做:

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

注意,我展示@clientswhere将返回一个集合,您可以选择第一个(尤其是如果你确信只有一个),这样做的:。

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