4

Railsアプリケーションにいくつかの定数を作成しようとしているドメインデータがあります。これは、DanChakのEnterpriseRails第7章で出会ったものです。私は次のことを行いました。

G = Rating.find_by_rating_code('G')

次に、Rating :: Gを使用すると、適切な評価レコードが返されます。これはうまくいきます。私の問題は、私が150の評価コードを持っているという事実が原因で発生します。そのため、評価コードごとに上記のコード行を入力する代わりに、モデルが多くの冗長なコードで乱雑にならないように、少しメタプログラミングを使用したいと考えていました。そこで、以下を試してみました。

RATINGSCODES = %w(G A AB TR P ...)

class << self
RATINGSCODES.each do |code|
code.constantize = Rating.find_by_rating_code(code)
end
end

残念ながら、初期化されていない定数エラーが発生し、どこが間違っているのかわかりません。私はこれに正しい方法でアプローチしていますか?私もconst_getを使ってみましたが、それもうまくいかなかったようです。

以下の提案で、私も使ってみました

code.const_set = Rating.find_by_rating_code(code)

これにより、次のエラーが発生しました。

undefined method `const_set=' for "G":String
4

2 に答える 2

7

使用const_set:

class Rating
   RATINGSCODES = %w{ G A AB TR P }

   RATINGSCODES.each do |code|
     const_set code, code
   end
end
#=> ["G", "A", "AB", "TR", "P"] 

p Rating::G
#=> "G" 
于 2012-04-21T15:59:52.793 に答える
1

あなたRating::Gのために働くなら、Raiting.const_get('G')またそうするでしょう。

于 2012-04-21T15:48:14.570 に答える