2015-04-22 74 views
2

我有紅寶石函數可以接受關鍵字參數以下形式:紅寶石字符串轉換爲關鍵字參數

def get_customer_information(name: nil, dob: nil, age: nil, state: nil) 
    ... query db based on supplied parameters 
end 

用戶可以指定1到所有的關鍵字參數。還有一個命令行界面,其中用戶可以通過調用命令行調用並傳入的以下形式的信息的鍵/值利用此功能:

>GetCustomerInformation name=myName, dob=myDOB 

的參數被解析和分離成鍵和值。但是,我需要知道哪個關鍵字參數與從命令行提供的輸入相關聯。有沒有一種方法可以將字符串轉換爲關鍵字參數(例如,將名稱轉換爲名稱:),這樣我就不需要對每個參數執行字符串比較以確定與哪個關鍵字參數相關聯,從而導致表單調用:

get_customer_information(name.to_keyword myName, dob.to_keyword myDOB) 

或者這是不可能在紅寶石?

+0

尋找'.to_sym'? http://ruby-doc.org/core-2.2.2/String.html#method-i-to_sym –

回答

1

您可以使用.to_sym方法。這是將字符串轉換爲符號的ruby函數方法。

或者使用rails自己的,「symbol name」.parameterize.underscore.to_sym。這會將字符串轉換爲:symbol_name。這使用rails命名約定。

+0

我收到一個錯誤,像這樣(字符串解析已經完成):name = name.to_sym, dob = dob.to_sym,然後調用函數:get_customer_information(名稱myName,dob myDOB)。在ruby中,符號和關鍵字是否有區別,因爲.to_sym給了我:name,而我通常傳入的關鍵字是name:'value'? – fowlball1010

+3

嘗試使它成爲'get_customer_information(name => myName,dob => myDOB)'(注意哈希火箭)。 '.to_sym'將「dob」轉換爲:dob(看起來像你期待的dob :)。 –

+0

是的,我試圖使用關鍵字參數(不確定散列火箭是否也等同於關鍵字參數,對於Ruby來說仍然是新的)。我能夠在使用.to_sym保存關鍵字參數的同時使用.to_sym方法。例如:get_customer_information({name.to_sym => myName,dob.to_sym => myDOB})。這可能等於你的建議。謝謝您的幫助! – fowlball1010