Hi all, I have very basic error that i have no idea how to show
I have user table
id
name
add
phone number
then i select all in user table
using => @users = User.all
=> @users.name
it gives me undefined method name Array<.....>
Please give me some advice..
Thanks
@users.all basically returns "array" of users
so you have to iterate through this array
@users.each do |user|
puts user.name
end
tom
Hi!
The method User.all returns an Array of users, not a single user.
I think you have to iterate over the array, using each.
@users.each { |u| u.name }
Everaldo
I have other undefined method when i combine the code above together
<%@users = User.all%>
<%@users.each do |u|%>
<%u.culture_id%>
<% @pic= Picture.where(:phrase_id => :route , :culture_id => u.culture_id).first%>
My picture <%= @pic.image %>
and it causes undefined method image
please give me advices… thank you so much
Joanne
thanks
Hi!
The method User.all returns an Array of users, not a single user.
I think you have to iterate over the array, using each.
@users.each { |u| u.name }
Everaldo
Hi all, I have very basic error that i have no idea how to show
I have user table
id
name
add
phone number
then i select all in user table
using => @users = User.all
=> @users.name
it gives me undefined method name Array<…>
Please give me some advice…
Thanks
Joanne
What does it say has not got a method image? It is always a good idea
to post the complete error message (use copy/paste rather than
re-typing it). If it says the nil has not got the method then your
call of Picture.where has not found a record.
Colin
the error is undefined method `image’ for nil:NilClass
You don’t have an <% end %> to close the <% @users.each %> block in the code you included, so my guess is that your u variable is already out of scope by the time you call u.image.
Please don't top post, it makes it difficult to follow the thread.
Insert your reply at appropriate places in previous message. Thanks.
the error is undefined method `image' for nil:NilClass
So what does that mean (see my previous post)?
Colin
My controller:
def index
@users= User.all
@users.each do |p|
@pic= Picture.where(:phrase_id => :route , :culture_id => p.culture_id).first
send_data @pic.image, :type => 'image/gif', :disposition => 'inline'
end
end
in View
<%= image_tag url_for(:controller => "/users", :action => "index"), :width => "25px", :height => "25px"%>
<%@pic.each do |c|%>
<%= c.image%>
<% end %>
please give me some advices…
thanks
Joanne
My controller:
def index
@users= User.all
@users.each do |p|
@pic= Picture.where(:phrase_id => :route , :culture_id => p.culture_id).first
send_data @pic.image, :type => 'image/gif', :disposition => 'inline'
end
end
in View
<%= image_tag url_for(:controller => "/users", :action => "index"), :width => "25px", :height => "25px"%>
<%@pic.each do |c|%>
<%= c.image%>
<% end %>
error is
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Extracted source (around line #79 ):
76:
77: <%= image_tag url_for(:controller => “/users”, :action => “index”), :width => “25px”, :height => “25px”%>
78:
79: <%@pic.each do |c|%>
80: <%= c.image%>
81: <% end %>
82:
Chirag
(Chirag)
June 21, 2011, 1:57pm
13
Your index action should be something like this:
def index
@users= User.all
@pic =
@users.each do |p|
@pic << Picture.where(:phrase_id => :route , :culture_id => p.culture_id).limit(1)
end
end
it does not work, it is complaining other error
NoMethodError (undefined method image' for [nil]:Array): app/controllers/patients_controller.rb:27:in
block in index’
app/controllers/patients_controller.rb:25:in each' app/controllers/patients_controller.rb:25:in
index’
Chirag
(Chirag)
June 21, 2011, 2:27pm
15
Oh yes… sorry about that.
I assumed that you will find picture for every query.
You can try this instead:
def index
@users= User.all
@pic =
@users.each do |p|
@pic << Picture.where(:phrase_id => :route , :culture_id => p.culture_id).limit(1)
end
@pic.compact !
end
by calling compact! on the array, we will eliminate all nil object.
On another note, are you sure, this is what you want to do? If you have 100 users, it will fire 100 sql queries which is not good.
Oh yes… sorry about that.
I assumed that you will find picture for every query.
You can try this instead:
def index
@users= User.all
@pic =
@users.each do |p|
@pic << Picture.where(:phrase_id => :route , :culture_id => p.culture_id).limit(1)
end
@pic.compact !
end
by calling compact! on the array, we will eliminate all nil object.
On another note, are you sure, this is what you want to do? If you have 100 users, it will fire 100 sql queries which is not good.
Yes i think i have that problem as well because if i remove "@users.each do |p| "
and then it will cause undefined method of culture_id…
plus when i call @pic.compact ! , it gives me
NoMethodError (You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.compact!):
app/controllers/patients_controller.rb:29:in `index’
what is mean? cuz i want to display picture on the browser too…
please help… thank you very much
Joanne
Chirag
(Chirag)
June 21, 2011, 2:56pm
17
Can you paste what you have in your index method?
You should not be getting this error because we have already defined @pic as an empty array.
hassan
(Hassan Schroeder)
June 21, 2011, 3:25pm
19
You would probably have fewer problems if you observed the Rails
naming conventions; e.g.
@pictures = # plural
@users.each do |user|
@pictures << Picture.where(:phrase_id => :route , :culture_id
=>user.culture_id).first
end
@pictures.compact !
Now it's obvious that the next line makes no sense:
send_data @pictures.image , :type => 'image/png', :disposition
=> 'inline'
An *array* of pictures doesn't have an "image" attribute.
HTH,