2011-12-18 5 views
0

tout ce que je veux, c'est dupliquer un enregistrement existant. Il devrait rendre la nouvelle forme avec les données peuplées et laissez-moi 'créer' ce nouvel enregistrement.rails dupliquer l'enregistrement ne pas rendre nouveau

def clone 
    @agreement = Agreement.find_by_slug!(params[:id]) 
    @agreement.clone 

    respond_to do |format| 
    format.html { render action: "new", notice: 'Agreement was successfully cloned.' } 
    end 
end 

Mon modèle

def clone 
    self.dup() 
    self.slug = nil 
end 

Je reçois cette erreur:

No route matches {:action=>"show", :controller=>"agreements", :format=>nil, :id=>#<Agreement id: 1, date: "2011-12-18",...` 

Routes

resources :agreements do 
    member do 
    post 'approve' 
    get 'clone', :controller => 'agreements', :action => 'clone' 
    end 
end 

Répondre

2

Je pense que votre méthode clone devrait être:

def clone 
    clone = self.dup() 
    clone.slug = nil 
    clone 
end 

Et le contrôleur:

agreement = Agreement.find_by_slug!(params[:id]) 
@agreement = agreement.clone 

ps: Pourquoi vous spécifiez le contrôleur et l'action dans vos itinéraires. C'est ce que serait le défaut, ou est-ce que je manque quelque chose?

+0

Merci @Robin Erreur perdue. Le clonage fonctionne maintenant. Une idée de comment inclure has_many associations aussi bien? J'ai également enlevé les peluches dans mes itinéraires, héritage de l'édition précédente – Gaelle

+0

J'ai essayé de trouver une bonne réponse à cette question pendant un moment. C'est le meilleur que j'ai trouvé. Plus ça marche! – memoht

Questions connexes