调用列表但收到错误"The action 'show' could not be found for SubjectsController"



我遵循关于rails的Lynda教程,并且除了包含相应信息的list.html.erb文件之外,还定义了list操作。

然而,当我继续访问~/subjects/列表时,我得到了这个:

未知的行动

无法找到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>&nbsp;</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>

你必须修改你的resources :subjects行,使它看起来像这样

resources :subjects do
  get 'list', on: :collection
end

这样,一个subjects/list url将在你的应用程序中可用。

让我解释一下:resources :subjects默认创建7个路由(url),这与您的SubjectsController中的7个操作相关(例如,GET http请求类型+ /subjects url将调用index操作)。看看你的rake routes输出(来自你的问题贴)来了解更多。如果您希望有更多以subjects/开头的url,您可以在resources块中添加如下行:

get 'list', on: :collectio n

这只是意味着GET http方法调用的subjects/list url将被创建。on: collection表示url不会像subjects/1/list那样。

更多信息,我建议阅读Rails Routing from the Outside In

我还没有找到一个更新日志来证实这一点,但我高度怀疑您遇到的问题是由于Rails 3之间的差异。4.

我最近看了同样的Lynda.com教程,他肯定在使用Rails 3,而且有一些地方他做的事情与Rails 4的工作方式并不完全一致。例如,当他生成迁移时,有updown方法,而在Rails 4中,我得到一个change方法。

所以我很确定你的问题是这个的另一个例子,因为我,像你一样,看到resources :controllername导致controllername/list的路由。我的直觉是/list已经合并到/index操作中(这就是我回避问题的方式),但我没有足够的权威来说明这是否是最佳实践。

最近遇到了完全相同的问题。正如SDP所指出的,Rails 3之间存在一些差异。x和Rails 4。Rails 4需要Show模板已经可用,即使您还没有单击主题/列表url上的Show按钮。解决这个问题的最简单方法是在视图的链接中临时放置一个占位符('#'),直到本教程的下一章,届时您将编写Show模板和操作。

相关内容

最新更新