2016-06-04 16 views
0

Ich brauche eine Hilfe. Ich erhalte den folgenden Fehler beim Veröffentlichen der Formulardaten mit ROR.Routing-Fehler beim Senden des Formulars mit ROR

No route matches [POST] "/articles/new" 

Rails.root: C:/Sites/blog 
Application Trace | Framework Trace | Full Trace 

Routes 

Routes match in priority from top to bottom 
Helper HTTP Verb Path Controller#Action 
Path/Url   
articles_path GET  /articles(.:format)  articles#index 
    POST /articles(.:format)  articles#create 
new_article_path GET  /articles/new(.:format)  articles#new 
edit_article_path GET  /articles/:id/edit(.:format) articles#edit 
article_path GET  /articles/:id(.:format)  articles#show 
    PATCH /articles/:id(.:format)  articles#up 

Ich erkläre meinen Code unten.

new.html.erb:

<%= form_for @article do |f| %> 
    <p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </p> 

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

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

date 

Wenn der Benutzer ist diese Form jene Art von Fehler abzulegen coming.My route.rb Datei ist unten angegeben.

Rails.application.routes.draw do 
    resources :articles 
    root 'welcome#index' 
end 

Mein Controller-Dateicode ist unten angegeben.

class ArticlesController < ApplicationController 
    def new 

    end 
    def create 
     @article = Article.new(article_params) 
    if @article.save 
     redirect_to @article 
    else 
     render 'new' 
    end 
    end 
end 

Ich bin mit Rails Version 4.2... .Please mir helfen, diesen Fehler zu beheben.

+0

Die Standard Rails 'new' Aktion wäre' GET/articles/new', aber die Standard 'create' Aktion wäre' POST/articles' (ohne das '/ new' am Ende); Ihr Formular wird an die falsche URL gesendet. Übrigens, sollte Ihre 'def new'-Controller-Methode' @article = Article.new' nicht enthalten? – GoBusto

+0

Können Sie Ihre Antwort bearbeiten? – subhra

Antwort

0

Der Standard Rails newGET /articles/new Aktion wäre, aber die Aktion Standard createPOST /articles (ohne die /new am Ende) sein würde; Ihr Formular wird irgendwie an die falsche URL gesendet.

Um schnell dieses Szenario neu erstellen, trat ich folgendes in einen Terminal:

rails new blog 
cd blog 
rails generate scaffold articles 
rake db:migrate 
rails s 

..., die mit den folgenden def new Verfahren einen Artikel Controller erstellt:

# GET /articles/new 
def new 
    @article = Article.new 
end 

ich navigiert zu http://127.0.0.1:3000/articles in meinem Browser vor dem Klicken auf "Neuer Artikel" und dann "Artikel erstellen"; Es sind keine Fehler aufgetreten.

jedoch das Entfernen der @article = Article.new Linie von def new (den Controller-Code in Ihrer Frage entsprechen), verursacht der folgende Fehler auf der „Neuer Artikel“ Seite erscheinen:

ArgumentError in Articles#new 

First argument in form cannot contain nil or be empty 

Extracted source (around line #1): <%= form_for(@article) do |f| %> 

Ich bin nicht sicher, wie Sie geschafft, weit genug zu bekommen, um die No route matches [POST] "/articles/new" Nachricht zu sehen, aber ich könnte mir vorstellen, dass die fehlende @article = Article.new Linie etwas damit zu tun hat.

-1

Sie können dies erreichen, indem er fügt hinzu:

def new 
    @article = Article.new 
end 
Verwandte Themen