5

Iam próbuje wstawić jakieś dane w celu database.but pokazano następujący błądRouting Error Brak dopasowania route [POST] "/ książka/tworzyć"

Routing Error 

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

kod do formularza submittion jest 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 jest

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 

Oto kod html dla 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> 

Oto 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

i co masz pod kontrolą r? def stworzyć ..... koniec ?? czy to jest thr? – swapnesh

+0

kod kontrolera jest wliczony w cenę – chinchu

Odpowiedz

12

tylko włącz post "book/create" w pliku router.rb

+0

tak, jego uzyskanie podczas dodawania tej linii – chinchu

0

oczyścić plik routes.rb po prostu to tak:

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

Z tego co widzę z pytaniem Jesteś walki Konwencja Rails, która czyni wszystko trudniejszym. należy:

  • mieć tylko resources :books w routes.rb
  • użytkowania postać pomocnika form_for(@book) który wygeneruje poprawną formę stworzyć książkę w new.erb.

mi polecić dobry odczyt szyn guides.The następujące prowadnice są szczególnie istotne na Twoje pytanie i jak rozwiązać swoje problemy:

Powiązane problemy