2016-10-23 3 views
0

WHICHモデルを配列に残して、そのモデルを使用して条件文を作成できるようにしようとしています。ハッシュ・レールでモデル・クラスのクラスを見つける4

このハッシュが

some_array_one.count = 0, 
some_array_two.count = 5, 
some_array_three.count = 0, 

その後set_classに対する答えが等しくなければならない持っていると仮定すると、

set_hash = { some_array_one: RedModel.some_scope, some_array_two: BlueModel.some_scope, some_array_three: GreenModel.some_scope } 

:BlueModel

は、これは私がその答えに

set_class = set_hash.reject{|k, v| v.count.zero?}.map{|k, v| v.first.class.name} 
を見つけることを試みてきた方法ですが

しかし、私が得るものは:

["BlueModel"] 

どのように私はその中に、配列の文字列-constantizeん 私はconstantizeを使用しようとすると、私はこのエラーを取得する(おそらく正しい用語を。):

NoMethodError: undefined method `constantize' for ["Item"]:Array 

答えて

1

How do I constantize that string-in-array (probably not the correct term.)

あり実際の方法は、それがないように聞こえる正確に何をしても、そのconstantize呼ば:

"BlueModel".constantize 
#=> BlueModel 

は実際に、それはONLの文字列でありますy v.first.class.nameを呼び出しているので、nameコールを削除すると、モデル自体が表示されます。

set_class = set_hash.reject{ |k, v| v.count.zero?}.map{ |k, v| v.first.class.name }.map(&:constatize).first 
set_class = set_hash.reject{ |k, v| v.count.zero?}.map{ |k, v| v.first.class }.first 
+0

はい、それは私にこのNoMethodErrorを与える:未定義のメソッド 'constantizeを」[ "アイテム"]のために:配列 – NothingToSeeHere

+0

は私が – NothingToSeeHere

+1

@NothingToSeeHereが(&' set_class.mapを追加するいずれかのことをしようとしたことmetionedしておく必要がありますconstantizeを).first'または 'set_class.first.constantize' –

関連する問題