哈希查找中ruby符号的问题
我试图创建一个简单的散列来查找一些符号对应的字符串(:student\u number,:first\u name,…)。但是,我在从这个函数检索数据时遇到了问题。下面是函数 片段A哈希查找中ruby符号的问题,ruby,ruby-on-rails-3,hash,symbols,Ruby,Ruby On Rails 3,Hash,Symbols,我试图创建一个简单的散列来查找一些符号对应的字符串(:student\u number,:first\u name,…)。但是,我在从这个函数检索数据时遇到了问题。下面是函数 片段A def get_nice_column_name(col_symbol) column_names = { :first_name => "Student's First Name", :last_name => "Student's Last Name",
def get_nice_column_name(col_symbol)
column_names = {
:first_name => "Student's First Name",
:last_name => "Student's Last Name",
:email => "Student's Email",
:given_name => "Student's Given Name"
}
return column_names[col_symbol]
end
下面是我如何使用它,但是不起作用:
片段B
col_titles = []
params = {:first_name => 'true',
:last_name => 'true',
:email => 'true',
:given_name => 'true' }
params.each do |key, value|
if ( value == 'true')
col_titles << get_nice_column_name(key)
end
end
我会把这个放在控制台里
col_symbol is 98351040, while :first_name is 1221688
col_symbol is 98351040, while :last_name is 580888
col_symbol is 98351040, while :email is 168888
col_symbol is 98351040, while :given_name is 1290648
983541040与{1221688,580888,16888,1290648}中的任何一个都不匹配。这就是为什么我的get_nice_列名没有用的原因吗?因为引擎盖下的符号不同
谢谢你们的帮助,伙计们
关于如果您使用的是Ruby 1.9,这是一种更简洁的方法
column_names = {
:first_name => "Student's First Name",
:last_name => "Student's Last Name",
:email => "Student's Email",
:given_name => "Student's Given Name"
}
params = {
:first_name => 'FirstName',
:last_name => 'LastName',
:email => 'Email',
:given_name => 'GivenName'
}
col_titles = []
col_titles = column_names.values
data = params.values_at(*column_names.keys)
col_titles # => ["Student's First Name", "Student's Last Name", "Student's Email", "Student's Given Name"]
data # => ["FirstName", "LastName", "Email", "GivenName"]
这利用了Ruby 1.9新的哈希行为,Ruby记住插入顺序,并在检索键和值时遵守该顺序。您可以使用1.8执行类似的操作,但是您必须定义数组中列的顺序,然后使用该顺序来提取列标题和数据值,而不是依赖
列名称来设置顺序。我只运行了上面列出的内容,它按照您的预期行为工作。这就是你遇到问题的代码吗?哇,伙计们,谢谢你们的回复。昨晚熬夜之后,我可能把事情搞混了。我发现了问题所在,“params”数组实际上是从“form_标记”传回的,所以,是的,它不是:first_name,而是first_name。现在一切都有意义了。谢谢你们,我真的很想为把事情搞混而道歉。嘿,谢谢你们给小费。这看起来比以前干净多了!
column_names = {
:first_name => "Student's First Name",
:last_name => "Student's Last Name",
:email => "Student's Email",
:given_name => "Student's Given Name"
}
params = {
:first_name => 'FirstName',
:last_name => 'LastName',
:email => 'Email',
:given_name => 'GivenName'
}
col_titles = []
col_titles = column_names.values
data = params.values_at(*column_names.keys)
col_titles # => ["Student's First Name", "Student's Last Name", "Student's Email", "Student's Given Name"]
data # => ["FirstName", "LastName", "Email", "GivenName"]