我正在尝试按照此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)
我看到了一些问题.首先,你的控制器应该是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不是创建的路由之一,这就是您收到该错误消息的原因.
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |