中包含
我正试图将一些数据插入数据库。但显示以下错误
Routing Error
No route matches [POST] "/book/create"
表单提交的代码是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
这是new.html.erb 的html代码
<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>
这是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
只需在router.rb文件
post "book/create"
从你的问题中可以看出,你正在与Rails约定作斗争,这让一切都变得更加困难。您应该:
- 路由中只有
resources :books
。rb - 使用表单助手
form_for(@book)
,它将生成正确的表单来在new.erb中创建一本书
我建议大家好好阅读一下Rails指南。以下指南与您的问题以及如何解决您的问题特别相关:
- http://guides.rubyonrails.org/routing.html
- http://guides.rubyonrails.org/form_helpers.html#relying-记录识别
清理routes.rb文件,只包含以下内容:
Library::Application.routes.draw do
resources :books, :except => [:index] do
collection do
get :list
get :show_subjects
end
end
end