2016-08-19 3 views
0

これはsubjects_controllerNameError:未定義のローカル変数またはメソッド 'がメインのために:(IRB)からオブジェクト:7

class SubjectsController < ApplicationController 
layout false 
def index 
@subjects = Subject.order("position ASC") 
end 

def show 

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

end 

def new 
end 

def edit 
end 

def delet 
end 
end 

であり、これは 'paramsはshow.html.erb'

<%= link_to("<< Back to List", {:class => 'index'}) :class => 'back- link)'%> 
<div class ="subjects show"> 
<h2>Show Subject</h2> 

<table sammary="Subject detail view"> 
<tr> 
    <th>Name</th> 

    <td><%= @subject.name %></td> 
</tr> 
<tr> 
    <th>Position</th> 
    <td><%= @subject.position %> </th> 
</tr> 
    <tr> 
    <th>Visible</th> 
    <td><%= @subject.visible ? 'true': 'flse' %> </th> 
</tr> 
<tr> 
    <th>Created</th> 
    <td><%= @subject.created_at %> </th> 
</tr> 
<tr> 
    <th>Updated</th> 
    <td><%= @subject.updated_at %> </th> 
</tr> 
</table> 
</div> 

ので、私は、ブラウザ上で何かをクリックしたとき、私は何も得ることはありませんし、私はレールコンソール

Subject.find(params[:id]) 

にこれをしなかったとき、私はこのmessagを取得しますe
NameError:未定義のローカル変数またはmain(Object)由来のオブジェクト 'params':7

+1

irb/consoleはどのパラメータがわからないためです。 – uday

答えて

0

paramsは現在のコンソールコンテキストでは未定義です。コンソールでコントローラコードを再作成しようとしています。コントローラでは、受信HTTP要求パラメータに従って自動的にparamsが割り当てられます。あなたが明示的にそれを割り当てない限り、コンソールのparamsは未定義です。あなたのコンソールでこれを試してみてください:

params = {id: 1} 
Subject.find(params[:id]) 

Subjectは、実際にはActiveRecordのモデルである場合には、エラーがスローされません。

あなたは本当に達成しようとしていますか?

0

あなたのコントローラをデバッグしたい場合は、例えば、特定のコンテキストのデバッグコンソールを取得するためにpryまたはbyebugを使用します。

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

ゴーsubjects/1/editパスに、レールのサーバーがブレークポイントで停止しますデバッグコンソールにアクセスできます。

関連する問題