App design question: user_photo helper

why not just pass the object to your helper method as an argument?

def user_photo(user)   user.photo? ? user.photo.public_filename(:thumb) : 'default.png' end

then in your view template just use:

<%= user_photo(@user) %>

Mike

Thanks Mike. I've tried your suggestion but it doesn't work - definitely due to my lack of understanding. On the posts index, I get the following;

You have a nil object when you didn't expect it! The error occurred while evaluating nil.photo?

I replaced the previous helper with your much more streamlined version. I also put the <%= user_photo(@user) %> in place of <%= link_to image_tag user_photo %> in the _post partial (I'll put the link_to and image_tag in when it's all working). But the post index action isn't passing a @user variable (as seen in the original post, above), and the _post partial currently works by calling 'post.user', or 'post.created_at.to_s(:short)' local variables on the @posts :collection passed on the index view;

<h2>Latest Posts</h2>

<%= render :partial => 'post', :collection => @posts %>

<%= will_paginate @posts %>

How does the @user variable fit in to this? Wouldn't it need to be defined in either the application helper or the Posts index action?

If you want to display a photo that is associated with a user, you will need to have access to the user object for that photo.

Looking at your original post, it appears that a post belongs to a user - is this correct? If so, in the posts index action for example, you would call Mike's suggested method as user_photo(post.user). What this is doing is passing the user object associated with that post through to the user_photo helper.

Regards

Robin

Robin, thanks for the explanation. A user has many posts, and a post belongs to a user. I'm still getting an error from the _post partial;

"undefined method `photo?' for #<User:0x3656eec>"

application_helper.rb

def user_photo(user)    user.photo? ? user.photo.public_filename(:thumb) : 'rails.png' end

_post.html.erb

<%= user_photo(post.user) %>

I don't understand why I'm getting the error, because I can link to a post.user.photo as follows;

<%= link_to image_tag(post.user.photo.public_filename(:thumb)), user_path(post.user) %>

And that successfully passes the 'post.user' to the user_path. Surely I'm misunderstanding how the helper uses the post.user to fetch the photo...