error in runtime controller#view

8 views
Skip to first unread message

rocky

unread,
Jul 4, 2012, 12:23:42 AM7/4/12
to rubyonra...@googlegroups.com
m getting an error "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id"
when i'm creating new record,like a topic has many discussions,when i'm creating a new discussions m getting that error..i already assign the topic id as foreign key in discussions controller....please sort out this problem.if u getting the same..how you rectify those errors..and in how many cases this errors are prone to occur???

radhames brito

unread,
Jul 4, 2012, 12:38:30 AM7/4/12
to rubyonra...@googlegroups.com


On Wed, Jul 4, 2012 at 12:23 AM, rocky <ashar...@gmail.com> wrote:
m getting an error "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id"
when i'm creating new record,like a topic has many discussions,when i'm creating a new discussions m getting that error..i already assign the topic id as foreign key in discussions controller....please sort out this problem.if u getting the same..how you rectify those errors..and in how many cases this errors are prone to occur???

We need more information to help you , can you post part of the relevant code?

Abhishek Sharma

unread,
Jul 4, 2012, 2:14:30 AM7/4/12
to rubyonra...@googlegroups.com
subjects has many pages
subject controller code::

class SubjectController < ApplicationController

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

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

def new
@subject = Subject.new(:visible => 'false')
@subject_count = Subject.count + 1
end

def create 
@subject = Subject.new(params[:subject])
if @subject.save
redirect_to(:action => 'list')
else
render('new')
end
end
end
 

page controller code::

class PageController < ApplicationController

    before_filter :find_subject
  
  def index
    list
    render('list')
  end
  
  def list
    @pages = Page.where(:subject_id => @subject.id)
  end
  
  def show
    @page = Page.find(params[:id])
  end
  
  def new
    @page = Page.new(:subject_id => @subject.id)
    @page_count = @subject.pages.size + 1
    @subjects = Subject.order('position ASC')
  end
  
  def create
    @page = Page.new(params[:page])
    if @page.save
      redirect_to(:action => 'list', :subject_id => @page.subject_id)
    else
      render('new')
    end
  end
  
  private
  
  def find_subject
    if params[:subject_id]
      @subject = Subject.find_by_id(params[:subject_id])
    end
  end
    
end

this is my controller code and when m creating new page m getting dat error...

Michael Pavling

unread,
Jul 4, 2012, 4:03:29 AM7/4/12
to rubyonra...@googlegroups.com
On 4 July 2012 07:14, Abhishek Sharma <ashar...@gmail.com> wrote:
> class PageController < ApplicationController
>
> before_filter :find_subject
>
> def new
> @page = Page.new(:subject_id => @subject.id)
> @page_count = @subject.pages.size + 1
> @subjects = Subject.order('position ASC')
> end
>
> private
> def find_subject
> if params[:subject_id]
> @subject = Subject.find_by_id(params[:subject_id])
> end
> end
>
> end

You're calling find_subject on a before_filter, and it may or may not
populate a @subject object depending on whether there's a param value.

But your action then goes on to expect there to definitely be an
@subject instance variable. Put a breakpoint in find_subject, and see
what the parameter values are.

Colin Law

unread,
Jul 4, 2012, 4:05:22 AM7/4/12
to rubyonra...@googlegroups.com
This means that you have some code some_object.id where some_object is
nil. The error message should tell you which line is failing. Have a
look at the Rails Guide on debugging for ideas on how to debug your
code to find the problem.

Colin
Reply all
Reply to author
Forward
0 new messages