Undefined method `name'

Hi Community…

I’m new in this game, so this might be a easy question, but I have
done my google, without result, so I will try this…

I’m learning ROR, and I’m using Patrick Lens ‘Ruby on Rails’ book.
(This is written for ror 1.x - and I’m using NetBeans 6.1 - ror 2.x -
this might be the problem…)

But…

I have made this Controller:

class StoryController < ApplicationController
def index
@current_time = Time.now
@s = Story.find_all_by_name(‘sitepoint’)
end
end

and this view:

Story#index

hej <%= @current_time %> <%= @s.name%>

Find me in app/views/story/index.html.erb

And, when browsing my ‘story’ (http://localhost:3000/story), I get
this error:
undefined method `name’ for [#<Story id: 2, name: “sitepoint”, link:
http://sitepoint”>]:Array

Now using the Rails console within Netbeans, gives me this

v = Story.find_by_name(‘sitepoint’)
v = Story.find_by_name(‘sitepoint’)
=> #<Story id: 2, name: “sitepoint”, link: “http://sitepoint”>
v.name
v.name
=> “sitepoint”

No problem with ‘name’ - so what is the difference ? -

Regards
Jørn

On Jul 8, 2008, at 4:03 PM, jborup wrote:

But…
and this view:
http://sitepoint”>]:Array
No problem with ‘name’ - so what is the difference ? -

In the first example you are using “find_all_by_name”. In the second
you are using “find_by_name”. The first returns an array. The second
returns a Story object.

You can see this in the error:

undefined method `name’ for [#<Story id: 2, name: “sitepoint”, link:
http://sitepoint”>]:Array

So you either need to loop in your view over @s. ie…

<% @s.each |story| do %>
<%= story.name %>
<% end %>

Or change your controller to match what you are doing in console.

-philip

I have made this Controller:

class StoryController < ApplicationController
def index
@current_time = Time.now
@s = Story.find_all_by_name(‘sitepoint’)
end
end
<…>

Now using the Rails console within Netbeans, gives me this

v = Story.find_by_name(‘sitepoint’)
v = Story.find_by_name(‘sitepoint’)
=> #<Story id: 2, name: “sitepoint”, link: “http://sitepoint”>
v.name
v.name
=> “sitepoint”

No problem with ‘name’ - so what is the difference ? -

Can you spot a difference between
Story.find_all_by_name(‘sitepoint’)
and
Story.find_by_name(‘sitepoint’) ?

Now think, what you get back from the first query, and what you get
back from the second one.
Then answer yourself, does Array have an ‘name’ attribute?

Regards,
Rimantas

http://rimantas.com/

Yes… hmmm… that is very clear, and removing the all, solved the
problem… guess it is getting a bit late…

Thank you for you comments… I’m back on track…

Regards
Jørn.