【问题标题】:Routing Error No route matches [POST] "/book/create"路由错误没有路由匹配 [POST] "/book/create"
【发布时间】:2013-02-15 04:04:47
【问题描述】:

我正在尝试将一些数据插入到数据库中。但显示以下错误

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

【问题讨论】:

  • 你在控制器中有什么? def 创建 ..... 结束 ??是吗?
  • 包含控制器代码

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2


【解决方案1】:

只需在您的 router.rb 文件中包含 post "book/create"

【讨论】:

    【解决方案2】:

    从您的问题中我可以看出,您正在与 Rails 约定作斗争,这使一切变得更加困难。你应该:

    • routes.rb 中只有resources :books
    • 使用表单助手form_for(@book) 将生成正确的表单以在new.erb 中创建一本书。

    我建议好好阅读 Rails 指南。以下指南与您的问题以及如何解决您的问题特别相关:

    【讨论】:

      【解决方案3】:

      清理您的 routes.rb 文件以仅包含以下内容:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        相关资源
        最近更新 更多