2017-08-18 6 views
0

J'ai un hachage constant P_FACT_MAP et un tableau de clés du hash précédent product_params[:product_factors]. Dans P_FACT_MAP, toutes les valeurs sont mappées à une autre valeur ou un tableau de valeurs qui sont les noms d'attribut de la table ProductFactor.Dynanmiquement mise à jour des attributs de rails spécifiques

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

Je suis en train de mettre à jour les valeurs d'attributs dynamiques en faisant:

ProductFactor.v << product_params[:p_id] 

Le code de la méthode complète:

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 

Mais il ne reconnaît pas le nom d'attribut v et J'obtiens l'erreur suivante:

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

N'est-il pas possible de mettre à jour dynamiquement la valeur d'un attribut ou dois-je adopter une approche complètement différente pour y parvenir?

Répondre

1

'v' est pas une méthode pour votre classe ProductFactor. Si vous essayez d'utiliser la variable v de |k, v|, remplacez ProductFactor.v par ProductFactor.send(v)

0

Je pense que cette ligne devrait être

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

remplacé par

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