2010-02-16 67 views
1

我正在使用適配器:oracle_enhanced,使用一個新的Rails項目&舊的已建立的Oracle數據庫。希望能夠對數據庫進行動態搜索,具體取決於可用於搜索的信息/字段。Ruby從查詢字符串創建對象

我試圖從

http://www.abc.com/order/show?acct_num=a123&po_num=789z 

來獲取和創建一個對象,如

class Order 
    attr_reader :customer_name, :acct_num, :order_date, :po_num, :qty. 
end 

我從request.query_parameters哈希表的PARAMATERS。

的情況下,我會走上錯誤的道路就是我想要做的就是使用查詢字符串,並能夠找到的所有訂單

現在在哪兒acct_num_in_model = acct_num_from_query_string和po_num_from_model = po_num_from_query_string等,如果事情是空的,如PO_NUMBER然後返回所有匹配的acct_number,如果acct_num空的所有符合該po。我期待下面:

abc.com/order/show?acct_num=a123&po_num=789z 

返回所有訂單acct_num = A123和po_num = 789z

abc.com/order/show?acct_num=a123 與acct_num = A123

返回所有訂單
abc.com/order/show?po_num=789z 

返回所有訂單po_num = 789z

abc.com/order/show?po_num=789z&qty=6 

與po_num = 789z &數量返回所有訂單= 6

+2

你能否更新你的問題並指出你是如何訪問你的數據庫的 - 是Rails,Sequel等? –

+1

只是爲了節省一些人在不需要時回覆基於Rails的解決方案。 –

回答

1

考慮要使用的軌道,我的建議是:這取決於你的Rails版本

QUERY_WHITELIST = ['po_num','qty','acct_num'] 
Order.find :all, :conditions => params.slice(*QUERY_WHITELIST) 

QUERY_WHITELIST = ['po_num','qty','acct_num'] 
Order.all :conditions => params.slice(*QUERY_WHITELIST) 

+0

當我使用這個解決方案時,我得到ArgumentError未知的密鑰(s):conditons(這是erros拼寫不是我的條件)。我相信那是因爲如果我做了params.inspect,我會得到......「action」=>「show」,「controller」=>「order」}。 因此,我將params.slice(* QUERY_WHITELIST)更改爲request.query_string.slice(* QUERY_WHITELIST),因爲request.query_string只包含來自查詢字符串的參數,但是在OrderController中給我TypeError#show無法將字符串轉換爲整數。 所以這不適合我。 –

+0

切片方法「過濾」參數,所以結果不再包含「動作」或「控制器」。但是query_string是一個字符串 - 你不想使用它(除非你想擺弄參數解析和消除)。我會盡力重現。過一會再來檢查。 – hurikhan77

+0

你使用什麼數據庫接口?我的決議是針對ActiveRecord的...你確定你在代碼中拼寫了「條件」嗎?有時會發生在我身上。 – hurikhan77