I am a little stuck with getting an sql result into my page. I want to
run a select distinct that returns all of the different sections
available and displays this as a form select. In my controller I have:
def edit
@resource = Resource.find(params[:id])
@sections = Resource.find_by_sql “SELECT DISTINCT
resources.section FROM resources”
end
And then in my view I have:
<% for option in @sections %>
<option value="<%= section.section %>"
<%= ’ selected’ if option.section == @resource.section %>>
<%= option.section %>
<% end %>
When I run this I get the following error:
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.each
From what I can see I am doing the same as other examples. I have run
the SQL on its own to make sure it returns a result and it does.
Thanks
Jamie
Jamie,
I don’t think your find_by_sql is giving you back what you think it is.
You
may want to look at what is contained in @sections using debug in your
view:
<%= debug( @sections ) %>
I believe you’ll see its an array having a hash as its only member, and
that
hash has one key, probably something like ‘resources.section’. So to get
at
your list you’ll need something like:
@sections[0][‘resource.section’]
but the debug should make it clear.
Jeff
Jeff,
adding <%= debug( @sections ) %> to the view displays the following:
Nothing more, I tried <%= debug( @sections[0] ) %> as well which gives
me a null error.
What does find_by_sql actually return?
Thanks
Jamie
I was just wondering if I am going about this the correct way. In my
database I have a “section” field which contains the section the
record is filed under. What I want to do is populate a select form
field with a list of available sections, hence the use of select
distinct. Would there be a built in function within rails for doing
this?
Jamie
Jamie D wrote:
I was just wondering if I am going about this the correct way. In my
database I have a “section” field which contains the section the
record is filed under. What I want to do is populate a select form
field with a list of available sections, hence the use of select
distinct. Would there be a built in function within rails for doing
this?
Jamie
Array has a method ‘uniq’:
[1,2,1].uniq # [1,2]
On 6/23/06, Jamie D [email protected] wrote:
On 22/06/06, Jamie D [email protected] wrote:
view:
available and displays this as a form select. In my controller I have:
def edit
@resource = Resource.find(params[:id])
@sections = Resource.find_by_sql “SELECT DISTINCT
resources.section FROM resources”
I don’t know if it will do what you want but you could try the :select
option for find.
I haven’t used it myself so I don’t know if it will work but I think it
goes
something like
@sections = Resouce.find( :all, :select => “DISTINCT section”)
def edit
@resource = Resource.find(params[:id])
@sections = Resource.find_by_sql “SELECT DISTINCT
resources.section FROM resources”
end
And then in my view I have:
<% for option in @sections %>
<option value="<%= section.section %>"
<%= ’ selected’ if option.section == @resource.section %>
<%= option.section %>
<% end %>
These errors are tough to track down, but I think rails is getting
“confused” with resource names or I should say you are confusing rails.
I havent tested but what about trying this:
def edit
@theresource = Resource.find(params[:id])
@theoptions = Resource.find_by_sql “SELECT DISTINCT
resources.section as dsection FROM resources”
end
<% for theoption in @theoptions %>
<option value="<%= theoption.dsection %>"
<%= ’ selected’ if theoptions.dsection == @theresource.section %>
<%= thoption.dsection %>
<% end %>
Sorted it with
@sections = Resouce.find( :all, :select => “DISTINCT section”)
Thanks