2013-08-29 25 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)