2017-08-18 2 views
0

Ich habe eine Konstante Hash P_FACT_MAP und ein Array von Schlüsseln des vorherigen Hash product_params[:product_factors]. In P_FACT_MAP werden alle Werte einem anderen Wert oder einem Array von Werten zugeordnet, die die Attributnamen der Tabelle ProductFactor sind.Dynanmic spezifische Schienen Attribute aktualisieren

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

Ich versuche, die dynamischen Attributwerte zu aktualisieren, indem Sie:

ProductFactor.v << product_params[:p_id] 

Der komplette Methodencode:

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 

Aber es erkennt nicht den Attributnamen v und Ich erhalte den folgenden Fehler:

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

Ist es nicht möglich, den Wert eines Attributs dynamisch zu aktualisieren, oder muss ich einen völlig anderen Ansatz wählen, um das zu erreichen?

Antwort

1

'v' ist keine Methode für Ihre ProductFactor Klasse. Wenn Sie versuchen, die Variable v von |k, v| zu verwenden, dann ersetzen Sie ProductFactor.v durch ProductFactor.send(v)

0

Ich glaube, diese Linie sein sollte

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

ersetzt mit

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