2012-11-09 56 views
0

我想知道是否可以在我的类中添加类似于此的东西,并让它构建一个我可以在其他类中引用的类属性。我不想记住身份证,我不想不断地更新身份证,因为体重表中的身份证号码发生了变化。我也不想将权重表锁定到一组特定的ID中。是否可以从数据库中动态生成cattr_reader散列?

所以我很乐意这样做如下:

class Weight < ActiveRecord::Base 
    attr_accessible :name 

    @@kind = { 
    Weight.all.each do |weight| 
     weight.name.delete(' ').underscore.to_sym: weight.id, 
    end 
    } 
    cattr_reader :kind, :instance_accessor => false 
end 

然后在代码中,我可以做这样的事情的其他地区..

scope :light, where(weight_id, Weight::kind(:light)) 

我敢肯定有一些魔法红宝石的方式,我只是不确定正确的语法。

回答

0

这是我到目前为止最接近的。

def self.kinds 
    kinds = Weight.all.map { |weight| { weight.name.delete(' ').underscore.to_sym => weight.id } } 
    kinds.reduce({}, :update) 
end 

然后......

scope :light, where(weight_id, Weight.kinds[:light]) 
0

为什么不把那种访问到一个类的方法将其从懒洋洋的数据库中加载的重量和查找的neccessary一个?

然而,你正在尝试做的东西似乎并不好。体重变化背后的表格是什么?在建立数据库连接之前将加载什么类(例如,在某些测试环境中)?我建议用合适的名称将范围改写成内连体重模型...

相关问题