没有路线匹配[GET]"/ book/list"第二部分:Rails的路线复仇

cho*_*on4 0 ruby-on-rails

我正在尝试按照此rails教程,但由于版本不匹配,我遇到了很多问题.我完全按照说明操作,直到现在我才真正了解所有内容,但我似乎无法自行解决此路由问题.我独立阅读了很多关于路线的信息但却无法弄清楚该怎么做.此问题之前已在stackoverflow上发布过一次,但由于版本问题,该解决方案对我不起作用

错误信息:

No route matches [GET] "/book/list"
Run Code Online (Sandbox Code Playgroud)

试图访问时http://localhost:3000/book/list.

route.rb

Rails.application.routes.draw do
  resources: :books
end
Run Code Online (Sandbox Code Playgroud)

意见>书> list.rhtml

<% if @books.blank? %>
<p>There are not any books currently in the system.</p>
<% else %>
<p>These are the current books in our system</p>
<ul id="books">
<% @books.each do |c| %>
<li><%= link_to c.title, {:action => 'show', :id => c.id} -%></li>
<% end %>
</ul>
<% end %>
<p><%= link_to "Add new Book", {:action => 'new' }%></p>
Run Code Online (Sandbox Code Playgroud)

模型> book.rb

class Book < ActiveRecord::Base
    belongs_to :subject
    validates_presence_of :title
    validates_numericality_of :price, :message=>"Error Message"
end
Run Code Online (Sandbox Code Playgroud)

模型> subject.rb中

class Subject < ActiveRecord::Base
    has_many :books
end
Run Code Online (Sandbox Code Playgroud)

控制器> book_controller.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
Run Code Online (Sandbox Code Playgroud)

Bar*_*cha 8

我看到了一些问题.首先,你的控制器应该是BooksController和不是BookController(你还需要确保它在一个被调用的文件中books_controller.rb).二,当你这样做时resources :books,Rails将创建以下路由

GET /books -> index
GET /books/:id -> show
GET /books/:id/edit -> edit
PUT /books/:id -> update
GET /books/new -> new
POST /books -> create
DELETE /books/:id -> destroy
Run Code Online (Sandbox Code Playgroud)

如您所见,list不是创建的路由之一,这就是您收到该错误消息的原因.