我正在关注有关rails的Lynda教程,除了list.html.erb文件之外,我还定义了列表操作以及相应的信息。
然而,当我继续访问〜/臣/列表时,我得到了这个:
未知行动
无法找到SubjectsController
的动作'show'
这是我控制器的代码:
class SubjectsController < ApplicationController
def list
@subjects = Subject.order("subjects.position ASC")
end
end
谢谢!
更新:这是我从Rake路线获得的
rake routes
subjects GET /subjects(.:format) subjects#index
POST /subjects(.:format) subjects#create
new_subject GET /subjects/new(.:format) subjects#new
edit_subject GET /subjects/:id/edit(.:format) subjects#edit
subject GET /subjects/:id(.:format) subjects#show
PUT /subjects/:id(.:format) subjects#update
DELETE /subjects/:id(.:format) subjects#destroy
更新:
视图list.html.erb的代码:
<div class="subject list">
<h2>Subjects</h2>
<table class="listing" summary="Subject list">
<tr class="header">
<th> </th>
<th>Subject</th>
<th>Visible</th>
<th>Pages</th>
<th>Actions</th>
</tr>
<% @subjects.each do |subject| %>
<tr>
<td><%= subject.position %></td>
<td><%= subject.name %></td>
<td class="center"><%= subject.visible ? 'Yes' : 'No' %></td>
<td class="center"><%= subject.pages.size %></td>
<td class="actions">
<%= link_to("Show", {:action => 'show', :id => subject.id}, :class => 'action show') %>
<%= link_to("Edit", '#', :class => 'action edit') %>
<%= link_to("Delete", '#', :class => 'action delete') %>
</td>
</tr>
<% end %>
</table>
</div>
答案 0 :(得分:2)
您必须修改resources :subjects
行,使其看起来像这样
resources :subjects do
get 'list', on: :collection
end
这样,您的应用就可以使用主题/列表网址。
让我自己解释一下:resources :subjects
默认创建7条路线(网址),这些路线与SubjectsController
中的7项操作相关(例如,GET
http resquest类型+ /subjects
网址会调用index
操作。查看您的rake routes
输出(来自您的问题帖子)以了解更多信息。如果您想要有更多以subjects/
开头的网址,可以在resources
区块中添加以下内容:
get 'list', on: :collectio
n的
这意味着将创建subjects/list
http方法调用的GET
网址。 on: collection
表示网址不会是subjects/1/list
。
有关详细信息,建议您阅读Rails Routing from the Outside In
答案 1 :(得分:0)
我没有找到确认这一点的更改日志,但我非常怀疑你遇到的问题是由于Rails 3.x和Rails 4之间存在差异。
我最近经历了相同的Lynda.com教程,他肯定使用Rails 3,并且有一些地方,他所做的事情与Rails 4的工作原理并不完美。例如,当他生成迁移时,有up
和down
方法,而在Rails 4中,我得到一个change
方法。
所以我很确定你的问题是另一个例子,因为我和你一样,看到resources :controllername
不导致controllername / list的路由。我的预感是/ list已被合并到/ index动作中(这是我回避问题的方式),但我还不足以说明这是否是最佳实践。
答案 2 :(得分:0)
刚刚过去完全相同的问题。正如SDP指出的那样,Rails 3.x和Rails 4之间存在一些差异。即使您没有单击主题/列表URL上的“显示”按钮,Rails 4也需要Show模板已经可用。解决问题的最简单方法是暂时在视图中的链接中放置一个占位符('#'),直到教程的下一章,您可以在其中编写Show模板和操作的代码。