Routing Error No route matches [POST] "/book/create"
12,321
Solution 1
just include post "book/create"
in your router.rb file
Solution 2
From what I can see from your question you are fighting against Rails convention which makes everything harder. You should:
- Only have
resources :books
in routes.rb - Use the form helper
form_for(@book)
which will generate the correct form to create a book in new.erb.
I recommend a good read of the Rails guides.The following guides are especially relevant to your question and how to fix your problems:
- http://guides.rubyonrails.org/routing.html
- http://guides.rubyonrails.org/form_helpers.html#relying-on-record-identification
Author by
divz
Updated on June 16, 2022Comments
-
divz almost 2 years
Iam trying to insert some data in to database.but showing following error
Routing Error No route matches [POST] "/book/create"
code for form submittion is 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 is
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
Here is the html code for 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>
Here is the 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