在rails中为键/值对实现动态方法

时间:2013-01-17 16:10:41

标签: ruby-on-rails dynamic-method

假设我有一个名为'options'的数据库表,其对应的模型叫做Option。该表的结构简单,如下......

id    -> primary key, auto increment
name  -> key
value -> value for the key

示例数据行可以如下...

id   name                         value     
---- ---------------------------- -----------
1    default_view                 DAILY     
2    show_registration_number     0         
3    notification_method          IMMEDIATE     

我想要的是所有选项(键)都可以作为方法名称访问。

例如,如果执行以下操作......

@options = Options.find(:all)

是否可以访问@options.default_view之类的数据,这些数据应该将值返回为“DAILY”,类似地@options.show_registration_number应该将值返回为0.

如果可能的话,是否允许进行修改,如@options.default_view = 'MONTHLY',并且应该更新数据库中的相应记录。

1 个答案:

答案 0 :(得分:0)

这会让你几乎找到你想要的答案:http://code.dblock.org/how-to-define-enums-in-ruby

它依赖于const_missing,并假设你的" enum"被定义为常量,在您的情况下Option::default_view

但是,很容易看到如何调整此代码以使用method_missing,以便您可以执行Option.default_view

同一方法的另一个例子包含在rails-settings gem中,因此您可以浏览this code以寻找您正在寻找的答案