1

私は Rails で Lynda のチュートリアルに従っており、対応する情報を含む list.html.erb ファイルに加えて list アクションを定義しました。

ただし、 ~/subjects/list にアクセスすると、次のようになります。

不明なアクション

SubjectsController のアクション「表示」が見つかりませんでした

これは私のコントローラからのコードです:

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>
4

3 に答える 3

2

resources :subjectsこのようにするには、行を変更する必要があります

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

このようにして、サブジェクト/リストの URL がアプリで利用できるようになります。

もっと説明させてください:resources :subjectsデフォルトで 7 つのルート (URL) を作成します。これは、あなたの 7 つのアクションに関連していますSubjectsController(たとえば、GEThttp リクエスト タイプ + /subjectsurl はindexアクションを呼び出します)。rake routes(質問投稿からの)出力を見て、詳細を理解してください。で始まる URL がもっと必要な場合は、ブロックsubjects/内に次のような行を追加できます。resources

get 'list', on: :collection

これは、 http メソッドsubjects/listによって呼び出される URLが作成されることを意味します。GETこれon: collectionは、URL が のようなものではないことを意味しsubjects/1/listます。

詳細については、Rails Routing from the Outside In を読むことをお勧めします。

于 2013-05-05T19:11:50.743 に答える