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 に答える