2012-04-25 11 views
0

私は新しいので、私の完全な無知を許してください。私はRails 3.2.3を使用しており、Ruby on Rails Essentialsコースをやっています。タイトルに記載されている章を完了しましたが、削除ボタンを確認した後にエラーページが表示されています。 error in actionを表示する動画は次のとおりです。Lynda RailsトレーニングでのActiveRecord :: RecordNotFoundエラー

私は以下のドキュメントを見て、タイプミスをしていないことを確認しました。ここで

<div class="subject list"> 
<h2>Subjects</h2> 

<%= link_to("Add New Subject", {:action => 'new'}, :class => 'action new') %> 

<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", {:action => 'edit', :id => subject.id}, :class => 'action edit') %> 
      <%= link_to("Delete", {:action => 'delete', :id => subject.id}, :class => 'action delete') %> 
     </td> 
    </tr> 
    <% end %> 
</table> 
ここ

は私subjects_controller.rb私delete.html.erbここ

<%= link_to("<< Back to List", {:action => 'list'}, :class => 'back-link') %> 

<div class="subject delete"> 
    <h2>Delete Subject</h2> 

<%= form_for(:subject, :url => {:action => 'destroy'}, :id => @subject.id) do |f| %> 

    <p>Are you sure you want to permanently delete this subject?</p> 

    <p class="reference-name">Subject name: <%= @subject.name %></p> 

    <div class ="form-buttons"> 
     <%= submit_tag("Delete Subject") %> 
     </div> 

    <% end %> 


</div> 

されている私のlist.html.erbある

class SubjectsController < ApplicationController 

    def index 
    list 
    render('list') 
end 


def list 
    @subjects = Subject.order("subjects.position ASC") 
    end 

    def show 
    @subject = Subject.find(params[:id]) 
    end 

    def new 
    @subject = Subject.new 
    end 

    def create 
    # Instantiate a new object using form parameters 
    @subject = Subject.new(params[:subject]) 
    # Save the object 
    if @subject.save 
     # If save succeeds, redirect to the list action 
     redirect_to(:action => 'list') 
    else 
     # If save fails, redisplay the form so user can fix problems 
     render('new') 
    end 
    end 

    def edit 
    @subject = Subject.find(params[:id]) 
    end 

    def update 
    # Find object using form parameters 
     @subject = Subject.find(params[:id]) 
     # Update the object 
     if @subject.update_attributes(params[:subject]) 
     # If save succeeds, redirect to the list action 
     redirect_to(:action => 'show', :id => @subject.id) 
     else 
     # If save fails, redisplay the form so user can fix problems 
     render('edit') 
     end 
    end 

    def delete 
    @subject = Subject.find(params[:id]) 
    end 

    def destroy 
    Subject.find(params[:id]).destroy 
    redirect_to(:action => 'list') 
    end 
end 

ここには上記のビデオで参照されている。

なぜ私がファイルを適切に削除できないのかを理解する助けを得ることができれば、それは素晴らしいことです。

答えて

0

"Lynda Ruby on Rails Essentialsコース"について聞いたことがありませんが、あなたの投稿フォームからあなたの削除フォームが完全に乱れていることがわかります。あなたはform_forを持っていますが、submit_tagを使用しています!それは意味をなさない。問題は、ログファイルを見ると、削除アクションに渡されたパラメータにIDが含まれていないことがわかります。したがって、@subject = Subject.find(params[:id])を使用すると、表示されているエラーが発生します。

解決策 - submit_tagをf.submitに変更するか、form_forをform_tagに変更して、正しいルートが呼び出されていることを確認します。そうすることで、idはparamsハッシュを介して返されます。

あなたのログファイルのスタックトレースは常にあなたの最も親しい友人です。できるだけ早く理解してください。私はあなたの最良の選択肢であるため、あなた最初の方法が機能しなかった理由は、この

<%= link_to("<< Back to List", {:action => 'list'}, :class => 'back-link') %> 

<div class="subject delete"> 
    <h2>Delete Subject</h2> 


    <p>Are you sure you want to permanently delete this subject?</p> 

    <p class="reference-name">Subject name: <%= @subject.name %></p> 

    <div class ="form-buttons"> 
     <%= button_to "Delete", subject_path(@subject), method: :delete %> 
    </div> 

</div> 

見えるようにフォームを変更することだと思う理由の数が多い場合は

UPDATE

先頭の開始タグ「<」を紛失したため、ボタンの代わりにテキストが表示されました

フォームを必要としないため、データを入力しないので、button_to d削除操作に進むよう指示します。

私は、コードをテストしていませんが、それは

+0

ジェームズ問題ないはずです、私は第一のオプションを試してみましたが、delete.htmlページがロードされたときにボタンが消えて、テキスト「%= f.submit(と交換しました"件名の削除")%> " 2番目のオプションでは、結果エラーページ「NoMethodError in Subjects#delete」が表示されます。 「正しいルートが呼び出されていない」ことがありますが、その意味がわかりません。 Lynda.comはオンライントレーニングコースですが、以前のバージョンのRailsを使用しています。これはいくつかの問題を引き起こしていると思います。私は彼らが持っているのとまったく同じようにコードを書いています。 –

+0

@BrettPayne私は自分の答えを更新しました。 AWDWR(Agile Web Development With Rails)のコピーを入手することを提案できますか?ほとんどのRails開発者にとって聖書であり、これを非常にはっきりと説明しています。少なくともhttp://pragprog.com/book/rails4/agile-web-development-with-railsから入手できるpdfを入手する必要があります – jamesc

関連する問題