2017-10-20 8 views
1

Je suis générer une forme avec form_for Rails comme suit:pourquoi form_for rails génère une action: 'show'?

# Controller 
def new 
    @species = Specie.new 
    render partial: 'maintainers/species/new' 
end 

# In _new.html.erb 
<%= render 'maintainers/species/form', species: @species %> 

# In maintainers/species/form 
<%= form_for(species, html: {remote: true, id: 'species_form'}) do |f| %> 
... 
<% end %> 

mais je reçois cette erreur:

No route matches {:action=>"show", :controller=>"species"} missing required keys: [:id]

Qu'est-ce qui pourrait se passer?

+0

Est-ce que cela se produit après avoir cliqué sur Envoyer? –

+0

Non, cela se produit lorsque le partiel est en charge, créant le formulaire. –

+0

Il y a une faute de frappe dans votre code: '@species = Specie.new' devrait être' @species = Species.new'. Je ne sais pas si c'est le problème. –

Répondre

0

Vous devez faire une demande POST pour appeler l'action create:

# In maintainers/species/form 
<%= form_for(species, html: {remote: true, , method: :post, id: 'species_form'}) do |f| %> 
... 
<% end %> 

Notez le paramètre method: :post.

Par défaut, form_for émet une requête GET, qui est mappée pour afficher l'action dans Rails.

+1

Cela devrait être une solution, mais form_for génère automatiquement la 'méthode' en fonction de l'objet passé, dans ce cas génère la méthode 'POST', car l'objet n'a été initialisé que dans un autre cas Object.find (1) ce qui est utilisé dans l'action edit et généré la méthode 'PATCH'. Maintenant, je suis d'utiliser cette forme partielle dans les deux cas et me cause des problèmes –