2017-09-13 1 views
0

Je suis complètement nouveau à RoR et essayait de construire un blog simple, mais déjà coincé à la fonction "Ajouter un message".Rails: Form_for: Aucune route correspond {: action => "show",: controller => "posts"} manquant clés nécessaires: [: id]

L'erreur suivante message apparaît lorsque je charge .../posts/new:

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

Voici ce que mon contrôleur messages ressemble à ceci:

class PostsController < ApplicationController 
def index 
end 

def new 
end 

def create 
    render plain: params[:post].inspect 
end 

fin

Voici ce que mes new.html.erb regards comme ceci:

<h1>Add Post</h1> 
<%= form_for :post, url: posts_path do |f| %> 
<p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
</p> 

<p> 
    <%= f.label :body %><br> 
    <%= f.text_area :body %> 
</p> 

<p> 
    <%= f.submit %> 
</p> 
<% end %> 

J'avais défini des messages comme ressource dans mes itinéraires. La chose surprenante est que, sur l'ordinateur portable de mon ami, le code fonctionne.

Je serais très heureux de tout conseil, et je m'excuse pour la question idiote.

+0

J'ai effectué votre titre, et retiré jurons de celui-ci. S'il vous plaît, ne prononcez pas de gros mots s'ils ne sont pas vraiment nécessaires. –

Répondre

0

Vérifiez vos itinéraires avec:

$rake routes 

Et vous verrez que le posts_path avec un identifiant son utilisé pour mettre à jour un « post » et de ne pas créer un, vous aurez également trouvé le chemin que vous voulez pour créer un nouveau "post".

Vous pourriez dire: mais je n'ai pas d'action de mise à jour. Si sur votre fichier de routes, vous utilisez le mot-clé resources, même si l'action elle-même est manquante.

Mise à jour: Retirez le

url: post_path 

À partir de votre appel form_for

Ma recommandation, consultez la rails guides on routing.

0

L'assistant form_for recherche un objet ressource à utiliser et vous lui attribuez un symbole. Je suppose que c'est supposer que c'est une URL d'action à la place, et traduire (ou essayer de) ce symbole dans une route.

En utilisant form_for dans une action new, la tendance est généralement de créer une nouvelle ressource et nourrir que dans le form_for aide:

def new 
    @post = Post.new 
end 
<%= form_for @post, url: posts_path do |f| %> 
    ... 
<% end %> 
+0

L'objet @post n'aura pas d'identifiant, donc le formulaire se plaindra encore, le problème est que le chemin qu'il utilise n'est pas pour créer mais mettre à jour un objet. –

+0

@GuillermoSiliceoTrueba Les formulaires ne se soucient pas des ID de ressources, sauf si vous les faites, et même alors, ils accepteront volontiers un zéro. – ArtOfCode

+0

mais ce n'est pas la forme_pour ce qui se plaint c'est le post_path et ils se soucient de zéro –