2009-09-13 5 views
1

J'ai deux attributs, 'a_value' et 'b_id'. (Pas leurs vrais noms.) 'A_value' est stocké sur le système de fichiers, en utilisant certaines informations du modèle 'B', référencé par 'b_id'.Puis-je modifier l'ordre d'affectation des nouvelles instances de modèle dans les rails

Alors, mon objet params ressemble:

params[:foo] = {"a_value"=>"nifty value","b_id"=>"38"} 

par exemple.

Maintenant, en foo_controller.rb:

foo = Foo.new(params[:foo]) 

Mais cela ne fonctionne pas avec.

ActiveRecord::RecordNotFound: Couldn't find Foo without an ID

Dans Foo.a_value = (valeur) Je

... 
self.my_path = self.b_id.the_path 
... 

On dirait que Rails est en train de faire les missions dans l'ordre alphabétique et paniquent quand b_id est pas là, même si elle est présente dans la params hash et passe la validation. Est-ce que je peux forcer l'ordre dans lequel cette affectation est effectuée?

Ou puis-je créer un before_filter qui fera l'affectation b_id avant que le reste de l'assignation de masse ne se produise?

Répondre

0

Je l'ai compris!

La façon de faire est la suivante:

foo = Foo.new 
foo[:b_id] = params[:foo][:b_id] 
foo.update_attributes(params[:foo]) 
if foo.save... 

Vous devez vous assurer que les validateurs sont en ordre, mais cela fonctionne.

Il serait plus agréable de spécifier un ordre partiel pour vos attributs sans avoir à les renommer.

Questions connexes