2017-08-18 7 views
0

私は一定のハッシュP_FACT_MAPと前のハッシュのキー配列product_params[:product_factors]を持っています。 P_FACT_MAPでは、すべての値は、別の値またはProductFactorテーブルの属性名である値の配列にマップされます。特定のレール属性をダイナミックに更新する

P_FACT_MAP = { 
    :x => %w[something] 
    :y => %w[something2, something] 
    :z => %w[something 3, something1] 
    ... 
    ... 
} 

私が実行して動的な属性値を更新しようとしている:

ProductFactor.v << product_params[:p_id] 

完全なメソッドコード:

ProductFactor::P_FACT_MAP.collect.do |k, v| 
    puts "Value #{v}" 
    if product_params[:product_factors].include? k 
    v.each do |f| 
     @coach_recommendation_factor.send(f) << @coach.id 
    end 
end 

しかし、それは属性名vを認識せず、次のエラーが表示されます。

NoMethodError (undefined method `v' for #<Class:0x007f95de9b8180>) 

属性の値を動的に更新することはできませんか、それともそのためには全く異なるアプローチをとる必要がありますか?

答えて

1

'v'に置き換え

ProductFactor::P_FACT_MAP.collect.do |k, v| 

があなたのProductFactorクラスのメソッドではありませんする必要があります信じています。変数v|k, v|から変更する場合は、ProductFactor.vProductFactor.send(v)

に置き換えてください
0

私は、この行が

ProductFactor::P_FACT_MAP.each do |k, v| 
関連する問題