def index
@users= User.all
@pic= []
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.
because i want to take a value “image” from Picture model
what can i do … I am really stuck now…
thanks
Joanne
Remove the send_data line, it isn’t required.
Yes, it did remove it.
Can you check if there are any records in your pictures table? Right now it looks like it is returning nil.
Yes, It has 1 record in Picture table and 3 records in User Table
I think it might be a good idea for you to work through some Rails
tutorials to understand the basics of Rails. The free-to-use-online
tutorial railstutorial.org is good. It might seem that the tutorial
does not lead to the application that you want to develop but if you
work right through it you will learn a vast amount and will then be
embarrassed to look back here at the questions you were asking
Also take a good look at the Rails Guides. I mean a *good* look do
not just skim through them. Again you will learn a lot and the time
spent will be saved many times over.
Colin
Chirag
(Chirag)
June 21, 2011, 3:46pm
24
Not sure why it errors out now.
Do you get the same error is it a different error this time?
Not sure why it errors out now.
Do you get the same error is it a different error this time?
this is my index
def index
@user= Users.all
@pictograph =
@user.each do |p|
@pic= Picture.where(:phrase_id => :route , :culture_id => p.culturet_id).first
@pic.compact!
end
end
and my view is
<%= image_tag url_for(:controller => "/users", :action => "index"), :width => "25px", :height => "25px"%>
my error:
Processing by UsersController#index as
User Load (1.0ms) SELECT “users”.* FROM “users” WHERE “users”.“id” = 1 LIMIT 1
PictureLoad (7.0ms) SELECT “pictures”.* FROM “pictures” WHERE “pictures”.“phrase_id” = ‘route’ AND “pictures”.“culturet_id” = 1 LIMIT 1
Completed in 237ms
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/users_controller.rb:27:in `block in index’
app/controllers/users_controller.rb:25:in each' app/controllers/users_controller.rb:25:in
index’
Chirag
(Chirag)
June 21, 2011, 3:59pm
26
Oh, so you are trying to get the image url from the user’s index action?
If yes, that’s not correct.
You should instead have a different method name and should request for image url of only one specific user.
It would help in cleaning up the code and solve this issue faster, if you can tell me what exactly you are trying to do.
Oh, so you are trying to get the image url from the user’s index action?
If yes, that’s not correct.
yes, i am trying to get image url from db
You should instead have a different method name and should request for image url of only one specific user.
I have def show to get specific user
def show
@user= User.find_by_id(params[:id])
end
It would help in cleaning up the code and solve this issue faster, if you can tell me what exactly you are trying to do.
I want take a value image from Picture table with specific user and display it on the screen.
can u help me… thanks :X so much much…
Joanne
Chirag
(Chirag)
June 21, 2011, 4:15pm
28
Ok, that’s clear now.
Do you use pastie (http://pastie.org/ ) or gist (https://gist.github.com/ )?
If yes, can you paste following on any of them and reply with link?
#models
User
Picture
#controllers
UsersController
#views
users/index
Ok, that’s clear now.
Do you use pastie (http://pastie.org/ ) or gist (https://gist.github.com/ )?
If yes, can you paste following on any of them and reply with link?
No, I am using that…
#models
User
id
name
address
culture_id
Picture
id
image(binary)
phrase_id
culture_id
Culture
id
phrase_id
controllers
UsersController
def index
@user= User.all
@pic=
@user.each do |p|
@pic<< Picture.where(:phrase_id => :route , :culture_id => p.culture_id).first
@pic.compact!
end
end
def show
@user= User.find_by_id(params[:id])
end
end
#views
users/index
<%= image_tag url_for(:controller => "/patients", :action => "index"), :width => "25px", :height => "25px"%>
Ok, that’s clear now.
Do you use pastie (http://pastie.org/ ) or gist (https://gist.github.com/ )?
If yes, can you paste following on any of them and reply with link?
No, I am not using that…
#models
User
id
name
address
culture_id
Picture
id
image(binary)
phrase_id
culture_id
Culture
id
phrase_id
controllers
UsersController
def index
@user= User.all
@pic=
@user.each do |p|
@pic<< Picture.where(:phrase_id => :route , :culture_id => p.culture_id).first
@pic.compact!
end
end
def show
@user= User.find_by_id(params[:id])
end
end
#views
users/index
<%=
image_tag url_for(:controller => "/users", :action => "index"), :width => "25px", :height => "25px"%>
Ok, some more questions:
So, you want to display an image of the culture associated with the user, right?
yes
How are you uploading pictures to your database?
right now, i just using the sqlite manager to upload the blob.
Chirag
(Chirag)
June 21, 2011, 5:29pm
34
Getting pretty late here, heading to bed. We can work on a cleaner solution tomorrow or others on the forum can help.
For now, this quick and dirty solution should work:
In your view
<% @users.each do |user| %>
<%= user.name %>
<%= image_tag url_for(:controller => "users", :action => "culture_image, :culture_id => user.culture_id, :phrase_id => ""), :width => "25px", :height => "25px"%>
<% end %>
Note that I haven’t put in a value for :phrase_id in the url, please substitute appropriate value there as required.
In your controller
def index
@user= User.all
end
def culture_image
picture = Picture.where(:phrase_id => params[:phrase_id], :culture_id => params[:culture_id]).limit(1)
if picture
send_data picture.image, :type => 'image/png', :disposition => 'inline'
else
render :status => 404
end
end
Note that you may have to modify your routes to include the new method “culture_image”… something like this"
resources :users do
get :culture_image, :on => :collection
end
thanks you so much…
Joanne
Chirag
(Chirag)
June 22, 2011, 4:00am
36
Is it working now?
If not post the error and we’ll see how to get it to a good shape.