2009-06-16 9 views
0

Admettons que je veux mettre tous les champs que je spécifions être = « grenouille »Dans Rails, comment puis-je mettre à jour les champs de formulaire dans le modèle?

Dans le modèle que je peux définir chacun manuellement:

self.field1 = 'frog' 
self.desc_field = 'frog' 
self.fieldx = 'frog' 
etc.... 

Mais comment puis-je cela en mettant la noms de champs dans un tableau?

Lorsque je tente

fields_array=['field1','desc_field','fieldx']  
fields_array.each { |field|  
    self.field = 'frog' 
}   

Il ne fonctionne pas. Aucune suggestion?

+0

Quel est le résultat final que vous essayez d'atteindre? Vous ne voulez probablement pas ce genre de code dans un contrôleur. –

+0

Oui, en fait le code est dans le modèle, merci j'ai mis à jour la question. Vraiment vouloir nettoyer ms mot unicode de la forme. A posé la question ici stackoverflow.com/questions/998555/ Mais il semble que les gens ont été submergés par la question complète, parce que personne n'a répondu. tellement pensé que quelqu'un pourrait répondre si c'était sous une forme plus simple. – Datatec

Répondre

2

réponse de John Topley ci-dessus est fondamentalement correcte, mais puisque vous voulez attribuer des valeurs que vous voulez faire quelque chose comme:

fields_array=['field1','desc_field','fieldx']  
fields_array.each { |field|  
    self.send("#{field}=", 'frog') 
} 

Notez la valeur ajoutée égale signe. Avec cela, vous faites self.field1='frog' plutôt que self.field1('frog').

+0

Bonne prise. Je n'étais pas sûr de la syntaxe exacte pour l'affectation et je n'ai pas d'interprète Ruby sous la main. –

0

Essayez d'utiliser la méthode send:

fields_array=['field1','desc_field','fieldx']  
fields_array.each { |field|  
    self.send("#{field}", 'frog') 
} 
+0

Le contrôleur d'action revient avec cette erreur "mauvais nombre d'arguments (1 pour 0)" – Datatec

Questions connexes