I’m getting this error-
ActiveRecord::RecordNotFound in PagesController#create
Couldn’t find Course without an ID
Btw, the pages belongs to courses, and the courses has many pages
Now, in my pages controller, for my create action, i have this–
def create
@course = Course.find(params[:id])
@page = @course.pages.build(params[:page])
… if and else stuff…
end
Whats wrong? Why am i getting this message? Thanks, i really need help!
Show your method and filters
Sent from my iPhone
I think because the record with that id is not existed in the database.
You
could check the database to to see whether there
is a record with the id. Or you could also check the id value in the
controller, is it valiable?
On Sun, Apr 4, 2010 at 12:24 AM, Conrad T. [email protected]
wrote:
end
def my_exceptional_method; Post.find( 2000 ); rescue
ActiveRecord::RecordNotFound => exception; puts exception.message; end
Correction, the above line should be the following:
def my_exceptional_method; Course.find( 2000 ); rescue
ActiveRecord::RecordNotFound => exception; puts exception.message; end
Good luck,
-Conrad
On Sat, Apr 3, 2010 at 7:05 PM, David Z. [email protected]
wrote:
Whats wrong? Why am i getting this message? Thanks, i really need help!
David, you’re assuming that the first line in the method is successful
after
execution. Thus, I would recommend doing something like the following:
def create
@course = Course.find( params[:id] ) # The exception is thrown
here.
@page = @course.pages.build( params[:page] )
if @page.save
flash[:notice] = "Successfully created page."
redirect_to course_url( @page.course_id )
else
render :action => 'new'
end
rescue ActiveRecord::RecordNotFound => exception # The thrown
exception
is caught and dealt with here.
logger.error( “Error: #{exception.message}”
flash[:error] = “#{exception.message}”
render :action => ‘new’
end
Next, you can test exception handling in the IRB by doing something as
simple as the following:
def my_exceptional_method; Post.find( 2000 ); rescue
ActiveRecord::RecordNotFound => exception; puts exception.message; end
my_exceptional_method
Lastly, I would recommend reading the relevant sections of “AWDwRails
3ed”
by Dave T. et al.
Good luck,
-Conrad
Hi David
This error is mainly because your not getting id in the create function
Please follow the following steps, i think this will solve your problem.
I hope you configured your routes like this
map.resources :courses do |course|
course.resources :pages
end
<%form_for :page,:url=>course_pages_path(@course) do %>
<%end%>
in controller
def new
@course = Course.find(params[:course_id])
end
def create
@course = Course.find(params[:course_id])
@page = @course.pages.find(params[:page])
end
Keep rocking!
David Z. wrote:
I’m getting this error-
ActiveRecord::RecordNotFound in PagesController#create
Couldn’t find Course without an ID
Btw, the pages belongs to courses, and the courses has many pages
Now, in my pages controller, for my create action, i have this–
def create
@course = Course.find(params[:id])
@page = @course.pages.build(params[:page])
… if and else stuff…
end
Whats wrong? Why am i getting this message? Thanks, i really need help!
On Sun, Apr 4, 2010 at 12:39 AM, Srijith nair [email protected]
wrote:
<%end%>
Srijith, the second isn’t correct because you’re
trying to find a page that doesn’t exist the database.
Thus, this will generate ActiveRecord::RecordNotFound
as would the first line if it doesn’t exist and the second
should like like the following:
@page = @course.pages.build( params[:page] )
@David - make sure that you have a ‘new’ method
on the PagesController defined as follows:
def new
@course = Course.find( params[:course_id] )
@page = @course.pages.build
end
Good luck,
-Conrad
can i comment out- map.resources :pages in my routes? or do i need
that?
Sorry!
that was new method by mistake i had written it as find.
map.resources :courses do |course|
course.resources :pages
end
<%form_for :page,:url=>course_pages_path(@course) do %>
<%end%>
in controller
def new
@course = Course.find(params[:course_id])
end
def create
@course = Course.find(params[:course_id])
@page = @course.pages.new(params[:page])
@page.save
end
Keep rocking
Conrad T. wrote:
On Sun, Apr 4, 2010 at 12:39 AM, Srijith nair [email protected]
wrote:
<%end%>
Srijith, the second isn’t correct because you’re
trying to find a page that doesn’t exist the database.
Thus, this will generate ActiveRecord::RecordNotFound
as would the first line if it doesn’t exist and the second
should like like the following:
@page = @course.pages.build( params[:page] )
@David - make sure that you have a ‘new’ method
on the PagesController defined as follows:
def new
@course = Course.find( params[:course_id] )
@page = @course.pages.build
end
Good luck,
-Conrad
On Sun, Apr 4, 2010 at 2:01 PM, David Z. [email protected]
wrote:
can i comment out- map.resources :pages in my routes? or do i need
that?
David, it really depends on what you’re trying to do. It seems that you
were using
nested resources. Thus, I would expect the following within your
routes.rb:
map.resources :courses, :has_many => :pages
map.root :courses
Good luck,
-Conrad
On Sun, Apr 4, 2010 at 4:17 PM, Conrad T. [email protected]
wrote:
map.resources :courses, :has_many => :pages
map.root :courses
Correction, it should be
map.root :controller => “courses”
-Conrad
thanks, that really helped! rated all of you guys 5 stars
Srijith nair wrote:
Hi David
This error is mainly because your not getting id in the create function
Please follow the following steps, i think this will solve your problem.
I hope you configured your routes like this
map.resources :courses do |course|
course.resources :pages
end
<%form_for :page,:url=>course_pages_path(@course) do %>
<%end%>
in controller
def new
@course = Course.find(params[:course_id])
end
def create
@course = Course.find(params[:course_id])
@page = @course.pages.find(params[:page])
end
Keep rocking!
David Z. wrote:
I’m getting this error-
ActiveRecord::RecordNotFound in PagesController#create
Couldn’t find Course without an ID
I have a very similar problem I think. I Can’t find Story without an ID.
This is from my email_controller.rb
def correspond
user = @current_user
story = Story.find(params[:id])
recipient = story.user
@title = “Email @current_user.login”
if param_posted?(:message)
@message = Message.new(params[:message])
if @message.valid?
UserMailer.deliver_message(
:user => user,
:recipient => recipient,
:message => @message,
:user_url => user,
:reply_url => url_for(:action => “correspond”,
:id => user.login)
)
flash[:notice] = “Email sent.”
redirect_to :action => “index”, :controller => “stories”
end
end
end
The problem is in the third line.
Any help would be much appreciated.
On 30 June 2010 17:47, Neil B. [email protected] wrote:
…
The problem is in the third line.
The error says that it cannot find Story without an id, you are asking
find to use params[:id]. So possibly params[:id] is not valid. What
is the value of params[:id]? Look in development.log to find out.
Also have a look at the rails guide on debugging, it will show you how
you can use ruby-debug to break into your code and inspect data, so
you can see what params[:id] is. In this case the log may be enough
though.
Colin
Colin L. wrote:
On 30 June 2010 17:47, Neil B. [email protected] wrote:
…
The problem is in the third line.
. What
is the value of params[:id]? Look in development.log to find out.
This is all I have in the log:
Processing EmailController#correspond (for 127.0.0.1 at 2010-06-30
19:32:58) [GET]
e[4;36;1mUser Load (0.5ms)e[0m e[0;1mSELECT * FROM “users” WHERE
(“users”.“id” = 1) LIMIT 1e[0m
ActiveRecord::RecordNotFound (Couldn’t find Story without an ID):
app/controllers/email_controller.rb:23:in `correspond’
Rendered rescues/_trace (57.5ms)
Rendered rescues/_request_and_response (0.4ms)
Rendering rescues/layout (not_found)
I’ll look at the debugging section
On 30 June 2010 20:37, Neil B. [email protected] wrote:
Processing EmailController#correspond (for 127.0.0.1 at 2010-06-30
19:32:58) [GET]
The params should be in here, since there is nothing I suggest that
you have not passed an id in the link (or you have attempted to but
it’s value is nil).
Colin