【问题标题】:How to pass hash values of ActiveRecord::Base class如何传递 ActiveRecord::Base 类的哈希值
【发布时间】:2014-11-24 17:16:32
【问题描述】:

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

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"}。键是字符串而不是符号,这会导致错误。

如何创建具有符号键的哈希? 也许更好的方式来完成我想要的?

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

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

    person.slice(:name).symbolize_keys
    

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

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

    我不认识 Ruby 2.1 中 keyword arguments 的新符号。很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      相关资源
      最近更新 更多