5

私のアプリはユーザーがいくつかの統計を送信するたびにテーブルの行を作成します。今私はいくつかの行を削除できるように削除ボタンを提供したいと思います。定義されていないメソッドnilのための `destroy ':NilClass

私は削除ボタンをクリックすると、私はエラーを取得する:どちらかのレールが何らかの理由、またはレールのために、この場合の破壊方法を理解していないよう

undefined method `destroy' for nil:NilClass 

は、破壊するために何も表示されませんようです、したがって、Nil:NilClass。

私の最初の質問は、いずれかの場合に該当する場合を特定することです。

私の2番目の質問は、それを固定している:D

ここに私のshow.htmlです:

<% provide(:title, "Log") %> 
<% provide(:heading, "Your Progress Log") %> 

<div class="row"> 
    <div class="span8"> 
    <% if @user.status_update.any? %> 
     <h3>Status Updates (<%= @user.status_update.count %>)</h3>  
     <table> 
     <thead> 
      <tr> 
      <th>Entry Date</th> 
      <th>Weight</th> 
      <th>BF %</th> 
      <th>LBM</th> 
      <th>Fat</th> 
      <th>Weight Change</th> 
      <th>BF % Change</th> 
      <th>Fat Change</th> 
      </tr> 
     </thead> 
     <tbody class = "status updates"> 
      <%= render @status_updates %> 
     </tbody>   
    <% end %> 
    </div> 
</div> 

"<% = @status_updates%>レンダリング" _status_update部分を呼び出します。

<tr> 
. 
. 
. 
. 
<% if current_user==(status_update.user) %> 
<td> 
     <%= link_to "delete", status_update, method: :delete %> 

</td> 
<% end %>   

</tr>          

そして最後に、ここでStatusUpdateControllerここ

def destroy 
    @status_update.destroy 
    redirect_to root_url 
end 

では、エラーページのパラメータです:

{"_method"=>"delete", 
"authenticity_token"=>"w9eYIUEd2taghvzlo7p3uw0vdOZIVsZ1zYIBxgfBymw=", 
"id"=>"106"} 
+1

@status_updateがコントローラに定義されていません。パラメータ(params [:id])を使用して、またはリソースresource.destroyを使用してアクセスする必要があります。あなたのレーキルートをチェックして、何のパラメータを使うかを確認してください。 –

+0

destroyメソッドの 'before_filter'に' @ status_update'を代入していますか?そうでない場合は、それがあなたの問題です。 –

答えて

9

あなたが任意のコードを示していないと(フィルタまたはそう) @status_updateを割り当てることができますが、私はそれがないと仮定します。したがって、destroyメソッドのインスタンス変数@status_updateは設定されていません。オブジェクトのIDでクラスを照会する必要があります。

次のように破壊する方法を書き直し

def destroy 
    @status_update = StatusUpdate.find(params[:id]) 
    if @status_update.present? 
     @status_update.destroy 
    end 
    redirect_to root_url 
end 

注:実際のクラス名とクラス名StatusUpdateを交換してください。

+0

私は参照してください。私は別のプロジェクトのチュートリアルに従っていますが、私が今この正確な目的を持っていることを理解していないコードがいくつかありました。 @status_updateインスタンスをオブジェクトIDに割り当てる "正しいユーザー"という専用の関数があります。 ご協力いただきありがとうございます。 –

+0

どうすればそのメソッドが呼び出されますか? – HungryCoder

+0

フィルタ前。私は置く: before_filter:correct_user、のみ:@場合 redirect_toのroot_url を破壊し、その後、民間の下で私が持っている: プライベート デフcorrect_user @status_update = current_user.status_update.find_by_id(のparams [IDを]) status_update.nil? end –

関連する問題