0

In the beginning Ruby: From Novice to Professional 一书第 13 章重点介绍了撰写本文时最流行的框架;当然,Rails 具有突出的特点。

用于介绍这些概念的项目有一个部分,它通过向脚手架添加 view_all 方法来扩展使用 rails 命令创建的通用应用程序:

def view_all
  @Entries = Entry.all(:order => 'created_at DESC')
end

它还指出 config/routes.rb 文件包含以下内容:

map.resources :entries

并更新为

map.resources :entries, :collection => { :view_all => :get }

问题是我的 config/routes.rb 文件看起来并不完全一样。它没有那map.部分,看起来像

resources :entries

:collection...无论如何,我添加了该部分。

然后这本书说将以下内容添加到 app/views/entries/view_all.html.erb

<% @entries.each do |entry| %>
  <h1><%= entry.title %></h1>
  <p><%= entry.content %></p>
  <p><em>Posted at <%= entry.created_at %></em></p>
<% end %>

<%= link_to 'Add New entry', new_entry_path %>

我已经完成了所有这些,但是当我尝试运行“应用程序”时出现错误

Couldn't find Entry with id=view_all

参数为

{"collection"=>{"view_all"=>:get},
 "id"=>"view_all"}

有没有其他人看过这本书,发现它有点过时并知道解决这个问题的方法,或者至少对我做错了什么有一个大致的了解?

4

1 回答 1

1

您所指的那本书使用的是旧版本的 Rails。

在 Rails 2 中,语法(如您所示):

map.resources :entries, :collection => { :view_all => :get }

在 Rails 3 中,语法是:

resources :entries do
  get :view_all, on: :collection
end

更新:

设法抓住了本书第二版的电子书版本,是的,第二版使用的是 Rails 2.3.2。我认为您应该努力为自己寻找一本新书,因为您使用的是 Rails 3(基于相关标签)。

为了理解路由,我认为Rails Routing from the Outside In文档非常冗长。

于 2013-08-29T23:28:38.453 回答