Now, I am having trouble with displaying the query result on
authors\show.html
I am having problems referencing the returned object and getting the two
columns displayed. The error is: “You have a nil object when you didn’t
expect it!”
I have this in my model:
class Author < ActiveRecord::Base
has_many :books
def author_age @results = Author.find :all, :conditions => [“age = ?”,
params[:authors]]
end
end
I have this on view\authors\show.html
Author Name
Age
<% @results.each do |result| %> // I am not sure if this is right!
<%=h @result.name %>
<%=h @result.age %>
What I want to do is to display the ‘name’ and ‘age’ that the query
returned.
Please help!
Cypray
Frederick C. wrote:
On 4 Dec 2008, at 14:28, Jay M. wrote:
What I want to do is to display all author’s name base on the selected
age.
please, What is wrong with my query?
because hashes are written with {} not () (and in fact you don’t even
need the {} here)
It is pointing to the line with the loop:
<% @results.each do |result|
So for one reason or another @results is nil
Most likely your query doesn’t return any records.
(btw: you better name that @authors instead of @results for
readablity)
So what is in params[:authors] ?
Where does this param come from and does it contain an age?
After all, that’s what you ask Rails to search for in @results = Author.find :all, :conditions => [“age = ?”, params
[:authors]]
So if for example params[:authors] would contain an authors id or
name (as the name suggests) then it wouldn’t find anything.
You could easily debug this with something like: @results = Author.find :all, :conditions => [“age = ?”, params
[:authors]]
logger.info “RESULT: #{@results.size}”
Then you would find the number of found records in development.log
(Where btw you could see, which params where sent to your controller)
The problem could be the query because when I search for one record, it
works.
So, this works fine without the query and the loop.
Author Name
Age
<%=h @author.name %>
<%=h @author.age %>
<% end %>
But this returns one ‘Name’ for the selected ‘age’. That means it is
returning the name that is in the same row with the selected age, that
is, having same id.
In the database, there are several names with same age. So, what I want
is a query that will return all names with age value equal to the value
of the selected age and not the id of the selected age.
In SQL, the query will be:
SELECT name, age
FROM authors
WHERE age = ‘the selected age’ // the value, not the id of the selected
age.
So, I need help with a query that will return all the names with the
selected age, and also the proper way to display those names and the age
on author\show.html
cypray
Thorsten M. wrote:
It is pointing to the line with the loop:
<% @results.each do |result|
So for one reason or another @results is nil
Most likely your query doesn’t return any records.
(btw: you better name that @authors instead of @results for
readablity)
So what is in params[:authors] ?
Where does this param come from and does it contain an age?
After all, that’s what you ask Rails to search for in @results = Author.find :all, :conditions => [“age = ?”, params
[:authors]]
So if for example params[:authors] would contain an authors id or
name (as the name suggests) then it wouldn’t find anything.
You could easily debug this with something like: @results = Author.find :all, :conditions => [“age = ?”, params
[:authors]]
logger.info “RESULT: #{@results.size}”
Then you would find the number of found records in development.log
(Where btw you could see, which params where sent to your controller)