2009-11-04 15 views
0

J'ai une action new dans mon contrôleur que je passe des paramètres dans la forme de mon nouvel objet sera rempli avec les valeurs de l'enregistrement que l'utilisateur est en train de dupliquer, spécifiquement cela donne à l'utilisateur la possibilité de «modifier» le nouveau contenu avant de le soumettre.écraser les attributs imbriqués modèle associé

comme ceci:

def new 
    @parent = Recipe.find(params[:parent_id]) 
    @recipe = Recipe.new(
    :name => @parent.name, 
    :description => @parent.description, 
    :ingredients => @parent.ingredients, 
    :steps => @parent.steps 
) 
end 

Mais le problème est que mes deux ingredients et steps ont des attributs imbriqués, chacun avec un identifiant de l'original. Le problème est que parce que les rails ne donne pas un nouvel identifiant à mes attributs imbriqués, il ne crée pas ces enregistrements, en fait je pense qu'il peut essayer d'économiser sur les autres.

Que puis-je faire ici? est-il un moyen de passer l'objet @parent.ingredients à mon paramètre :ingredients et lui donner un nouvel ID?

Comme je sais que la question pourrait être la première ligne de l'action

@parent = Recipe.find(params[:parent_id]) 

Parce qu'il est une trouvaille qu'il va apporter les paramètres avec elle, mais est là loin de trouver cet objet, et créer de nouveaux ids pour tous les objets imbriqués attributs?

Répondre

1
@recipe = Recipe.new(:name => @parent.name, :description => @parent.description) 

@parent.ingredients.each { |i| @recipe.ingredients.build(:name => i.incredient_name, :description => i.ingredient_description) } 

Vous avez du sens?

+0

Ceci est une approche intéressante, et c'est vraiment super logique aussi, je peux voir quelques endroits où je peux l'utiliser. –

+0

Je suis sûr à 75% que 'dup' a résolu mes ennuis, il semble louche, comme si on me trompait. –

+0

De rien! – bensie

0

Wow! ma mâchoire était juste sur le sol.

@recipe = @parent.dup 
Questions connexes