In order to respect DRY principles, I had to regroup two controller in
one. To sum up, I have to build one controller which can make a ‘simple’
page and this same page with other features when a second id param is
entered in the url.
This is why, I modified the file ‘routes.rb’ so the action could access
to 2 params: :id and :tuto_id
In the controller, only :id is mandatory
I would like to control if the url contains the param :tuto_id
I wrote the controller:
unless params[:tuto_id].nil?
if Tuto.exists? params[:tuto_id] @tuto = Tuto.find(params[:tuto_id])…
And in the view when I want to show more objects when the url contains
params[:tuto_]id
<% unless @tuto.nil? %>…
When the url contains just the params :id, there is no problems but when
it contains the two params, I have the error:
Called id for nil, which would mistakenly be 4 – if you really wanted
the id of nil, use object_id
Is my strategy the right one ?
Does this error refers to a another problem ?
In the controller, only :id is mandatory
I would like to control if the url contains the param :tuto_id
I wrote the controller:
unless params[:tuto_id].nil?
if Tuto.exists? params[:tuto_id] @tuto = Tuto.find(params[:tuto_id])…
This could be simplified:
@tuto = Tuto.find(params[:tuto_id]) if params[:tuto_id]
(This will raise an exception if an invalid tuto_id is passed)
And in the view when I want to show more objects when the url contains
params[:tuto_]id
<% unless @tuto.nil? %>…
The nil? test is unecessary. You can just use <% if @tuto %>. But what
you have should work fine.
When the url contains just the params :id, there is no problems but when
it contains the two params, I have the error:
Called id for nil, which would mistakenly be 4 – if you really wanted
the id of nil, use object_id
Is my strategy the right one ?
Does this error refers to a another problem ?
The error is coming from somewhere else. Look at the backtrace
information in the error report. It looks like you’re probably using @tuto.id somewhere, but @tuto is nil.