2012-11-09 89 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一個?

然而,你正在嘗試做的東西似乎並不好。體重變化背後的表格是什麼?在建立數據庫連接之前將加載什麼類(例如,在某些測試環境中)?我建議用合適的名稱將範圍改寫成內連體重模型...

相關問題