Rob Biedenharn wrote in post #968091:
> On Dec 12, 2010, at 4:59 PM, Rodrigo Mendona wrote:
>
>> other way is
>>
>> <%=p.user.name unless p.user.empty?%>
>
> Or, you can push that into the model and avoid the extra logic in the
> view:
>
> class Post
>    def user_name
>      self.user ? self.user.name : "(none)"
>    end
> end
>
> <% @posts.each do |post| %>
>    <%= post.user_name %>
> <% end %>

Why would you do that, though?  Sure, it keeps a little bit of method 
chaining out of the view, but at the cost of a completely unnecessary 
model method.

If a calculation were being performed to get this value, I'd agree with 
defining a method.  But I think accessor method chaining in the view is 
generally acceptable, particularly when it simply involves traversing 
already loaded associations.

>
> You could name the method something like "author_string" or "by_line",
> too.  The idea is to keep the view very clean.

Method chaining is much cleaner than this IMHO.

>  You might be able to
> simply `delegate :name, :to => :user` in your Post model, but that
> would have given you the same problem if the post.user_id referred to
> a non-existent User.

delegate seems smelly in this context.

>
> -Rob

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to