2015-04-22 73 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