2010-01-20 7 views
0

Je suis en train de définir des attributs d'un tableau comme ceci:Ruby: Définir des attributs en bouclant un tableau?

["a", "b", "c"].each do |field| 
    @recipe.field = "anything" 
end 

Je veux finir avec quelque chose comme ceci:

@store.a = "anything" 
@store.b = "anything" 
@store.c = "anything" 

Savez-vous ce que je devrais faire avec le @store . champ ci-dessus? J'ai essayé @ store.send (field), mais cela ne fonctionne pas pour moi et je n'ai aucune idée des mots-clés à rechercher pour trouver une solution à ce qui précède. Toute aide est grandement appréciée.

Répondre

4

La méthode setter pour l'attribut a est connu sous le nom a=, vous pouvez donc utiliser send avec un argument "a=" pour appeler la méthode setter:

["a", "b", "c"].each do |field| 
    @recipe.send(field + "=", "anything") 
end 
+0

Merci beaucoup, Brian =) Je l'apprécie vraiment! – andy

1

Si vous voulez ajouter dynamiquement des attributs à la classe, alors vous devriez utiliser attr_accessor mthod (ou vérifier ce qu'il fait

class Recipe 
    attr_accessor *["a", "b", "c"] 
end 

["a", "b", "c"].each do |field| 
    @recipe.send("#{field}=", "anything") 
end 

Edit:
Comme vous le voyez dans l'exemple, si vous souhaitez affecter quelque chose à champ défini par la méthode def attr=, alors vous devez appeler send avec "attr=", value params.

+0

Merci MBO! Vous et Brian êtes géniaux. Je vous remercie! – andy

Questions connexes