哈希查找中ruby符号的问题

哈希查找中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",

我试图创建一个简单的散列来查找一些符号对应的字符串(: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", 
      :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"]