5

Iam versuchen, database.but zeigt folgende Fehler einige Daten in einfügenRouting Fehler Keine Route treffer [POST] "/ Buch/create"

Routing Error 

No route matches [POST] "/book/create" 

Code für Form submittion ist new.html.erb

<h1>Add new book</h1> 
<%= form_tag :action => 'create' %> 
<p><label for="book_title">Title</label>: 
<%= text_field 'book','title' %></p> 
<p><label for="book_price">Price</label>: 
<%= text_field 'book','price'%></p> 
<p><label for="book_subject">Subject</label>: 
<%= text_field 'subject','subject'%></p> 
<p><label for="book_description">Description</label><br/> 
<%= text_area 'book','description'%></p> 
<%= submit_tag "Create"%> 
<%= link_to 'Back',{:action=>'list'}%> 

routers.rb ist

Library::Application.routes.draw do 
    get "book/list" 

    get "book/show" 

    get "book/new" 

    get "book/create" 

    get "book/edit" 

    get "book/update" 

    get "book/delete" 

    resources :books, :only => [:new, :create] 
    match '/books' => 'books#create', :via => :post 

Hier ist der hTML-Code für new.html.erb

<h1>Add new book</h1> 
<form accept-charset="UTF-8" action="/book/create" method="post"> 
<p><label for="book_title">Title</label>: 
<input id="book_title" name="book[title]" size="30" type="text" /></p> 
<p><label for="book_price">Price</label>: 
<input id="book_price" name="book[price]" size="30" type="text" /></p> 
<p><label for="book_subject">Subject</label>: 
<input id="subject_subject" name="subject[subject]" size="30" type="text" /></p> 
<p><label for="book_description">Description</label><br/> 
<textarea cols="40" id="book_description" name="book[description]" rows="20"> 
</textarea></p> 
<input name="commit" type="submit" value="Create" /> 
<a href="/book/list">Back</a> 

Hier ist die bookcontoller.rb

class BookController < ApplicationController 
    def list 
     @books = Book.find(:all) 
    end 
    def show 
     @book = Book.find(params[:id]) 
    end 
    def new 
     @book = Book.new 
     @subjects = Subject.find(:all) 
    end 
    def create 
     @book = Book.new(params[:book]) 
     if @book.save 
      redirect_to :action => 'list' 
     else 
      @subjects = Subject.find(:all) 
      render :action => 'new' 
     end 
    end 
    def edit 
     @book = Book.find(params[:id]) 
     @subjects = Subject.find(:all) 
    end 
    def update 
     @book = Book.find(params[:id]) 
     if @book.update_attributes(params[:book]) 
     redirect_to :action => 'show', :id => @book 
     else 
     @subjects = Subject.find(:all) 
     render :action => 'edit' 
     end 
    end 
    def delete 
     Book.find(params[:id]).destroy 
     redirect_to :action => 'list' 
    end 
    def show_subjects 
     @subject = Subject.find(params[:id]) 
    end 
end 
+0

und was Sie in controlle haben r? def schaffen ..... Ende ?? ist es dr? – swapnesh

+0

Controller-Code ist enthalten – chinchu

Antwort

12

nur enthalten post "book/create" in Ihrem Router.RB-Datei

+0

ja es wird beim Hinzufügen dieser Zeile – chinchu

0

Reinigen Sie Ihre routes.rb Datei bis zu gerade hierfür sind:

Library::Application.routes.draw do 
    resources :books, :except => [:index] do 
    collection do 
     get :list 
     get :show_subjects 
    end 
    end 
end 
2

Von dem, was ich aus Ihrer Frage sehen Sie gegen kämpfen Rails-Konvention, die alles schwieriger macht. Sie sollten:

  • haben nur resources :books in routes.rb
  • Verwenden Sie das Formular Helfer form_for(@book), die die richtige Form zu generieren, ein Buch in new.erb zu erstellen.

Ich empfehle eine gute Lektüre der Rails guides.The Führungen folgenden sind besonders relevant für Ihre Frage und wie Sie Ihre Probleme zu beheben:

Verwandte Themen