0

我想知道我是否可以在我的类中添加类似的东西并让它构建一个我可以在其他类中引用的类属性。我不想记住 id,也不想在权重表中的 id 发生变化时不断更新 id。我也不想将权重表锁定到一组特定的 ID 中。

所以我想做如下的事情:

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))

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

4

2 回答 2

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])
于 2012-11-09T03:05:32.163 回答
0

为什么不把 kind 访问器变成一个类方法,它会懒惰地从数据库中加载权重并查找必要的权重呢?

但是,您尝试做的事情似乎并不好。体重变化背后的表格是什么?在建立数据库连接之前(例如,在某些测试环境中),您的类将被加载?我建议用适当的名称将范围重写为内部连接重量模型......

于 2012-11-09T03:08:19.003 回答