5

Iam cercando di inserire alcuni dati per database.but mostra seguente erroreRouting errore Nessuna corrispondenza del percorso [POST] "/ libro/creare"

Routing Error 

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

codice per la forma submittion è 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 è

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 

Ecco il codice html per 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> 

Ecco la 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

e quello che hai in controlle r? def creare ..... fine ?? è thr? – swapnesh

+0

codice controller incluso – chinchu

risposta

12
solo

includi post "book/create" nel tuo file router.rb

+0

si sta ricevendo mentre aggiunge questa linea – chinchu

0

ripulire il file di routes.rb per includere proprio questo:

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

Da quello che posso vedere dalla tua domanda si stanno combattendo contro Convenzione Rails che rende tutto più difficile. Si dovrebbe:

  • avere Solo resources :books in routes.rb
  • Utilizza il modulo di aiutante form_for(@book) che genererà la forma corretta per creare un libro in new.erb.

vi consiglio una buona lettura delle rotaie guides.The seguenti guide sono particolarmente rilevanti per la tua domanda e su come risolvere i problemi:

Problemi correlati