呼叫列表但收到错误"操作'显示'找不到SubjectsController"

时间:2013-05-05 18:50:22

标签: ruby-on-rails-3

我正在关注有关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>&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>

3 个答案:

答案 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的工作原理并不完美。例如,当他生成迁移时,有updown方法,而在Rails 4中,我得到一个change方法。

所以我很确定你的问题是另一个例子,因为我和你一样,看到resources :controllername 导致controllername / list的路由。我的预感是/ list已被合并到/ index动作中(这是我回避问题的方式),但我还不足以说明这是否是最佳实践。

答案 2 :(得分:0)

刚刚过去完全相同的问题。正如SDP指出的那样,Rails 3.x和Rails 4之间存在一些差异。即使您没有单击主题/列表URL上的“显示”按钮,Rails 4也需要Show模板已经可用。解决问题的最简单方法是暂时在视图中的链接中放置一个占位符('#'),直到教程的下一章,您可以在其中编写Show模板和操作的代码。