如何将ActiveModel中的模型视为哈希?

时间:2014-07-16 10:41:56

标签: ruby activemodel

我想在我的Ruby应用程序中创建一个以“settings”数据库表为中心的Settings模型。该表如下所示:

==========================
id  | key          | value
==========================
1   | site_version | 1.0.5
2   | something    | value

我希望能够通过此设置模型访问此表中的每一行,就像我使用普通的Ruby哈希一样。所以我可以使用Settings.site_version或Settings ['site_version']来访问“site_version”值。

我知道我以前见过这样的东西,但我没有看到任何东西。我怎么做到这一点?博客文章的链接也足够了。

1 个答案:

答案 0 :(得分:1)

您可以在设置模型

中定义类方法
def self.my_method(key)
  where(key: key).first.try(:value)
end

您可以访问my_method('site_version')

等值

如果你真的想要Hash

假设您没有很多记录且所有密钥都是唯一的,您可以

settings = Hash[ Setting.all.map {|s| [s.key, s.value]} ]

settings是哈希,您可以访问settings['site_version']

等值

注意:如果您在设置表中有其他属性,请不要忘记在查询中使用select。