如何传递ActiveRecord :: Base类的哈希值

时间:2014-11-24 17:16:33

标签: ruby-on-rails ruby activerecord

我有接受关键字参数的方法。

def foo(name:)
  p name
end

我的ActiveRecord::Base子类Person具有name属性。

现在我使用foo(name: person.name)的方法。

但我想调用类似foo(person.slice(:name))foo(person.attributes)的方法,因为还有其他一些关键字参数。

我发现person.slice(:name)返回{"name": "Someone"}。键是字符串而不是符号,这会导致错误。

如何创建具有符号键的哈希? 也许更好的方法来实现我想要的目标?

1 个答案:

答案 0 :(得分:1)

这就是ActiveRecord存储属性的方式。你想要的是:

person.slice(:name).symbolize_keys

如果您经常这样做,可能需要修补ActiveRecord:

def symbolized_slice(*args)
  slice(*args).symbolize_keys
end

我在Ruby 2.1中没有认识到keyword arguments的新表示法。有趣。