<% (users = account.users).any? && users.tap do |users| %> Less pretty, still works.
-- Richard Schneeman http://heroku.com @schneems (http://twitter.com/schneems) On Friday, January 25, 2013 at 4:13 PM, Ngan wrote: > The problem (I think) with that is that "#users" could be an expensive call > you only wish to make once. And I don't want to get into memoizing... > > <% account.expensive_call_for_users.any? && > account.expensive_call_for_users.tap ... %> > > > On Friday, January 25, 2013 2:11:18 PM UTC-8, Godfrey Chan wrote: > > Actually, on second thought, this would do exactly what you wanted, and > > It's Just Ruby (tm): > > <% account.users.any? && account.users.tap do |users| %> > > # ... <% end %> > > > > > > > > On Fri, Jan 25, 2013 at 2:09 PM, Ngan <ngan...@gmail.com (javascript:)> > > wrote: > > > Thank you Godfrey! This does solve 99% of my cases! > > > > > > @Andrew Using if, the variable "users" is now available everywhere...I > > > only want it available in my block. > > > > > > > > > On Friday, January 25, 2013 2:05:31 PM UTC-8, Godfrey Chan wrote: > > > > Object#try takes a block. It'll probably take care of most simple cases > > > > for you: > > > > > > > > <% account.owner.try do |user| %> <!-- This is shown only if > > > > account.owner is not nil? --> <% end %> > > > > > > > > > > > > On Fri, Jan 25, 2013 at 1:17 PM, Ngan <ngan...@gmail.com> wrote: > > > > > I originally brought this up in: > > > > > https://github.com/rails/rails/issues/9067 > > > > > > > > > > > > > > > Rails paved the way for Object#tap and Object#try...I'd like to > > > > > propose Object#tap_if and its counterpart,Object#tap_unless. > > > > > > > > > > > > > > > I've been following 37signals conventions of tapping variables in the > > > > > views: > > > > > > > > > > <% account.owner.tap do |user| %> ... <% end %> > > > > > > > > > > But, I find myself having to do this a lot... > > > > > > > > > > <% account.owner.tap do |user| %> <% if user %> ... <% end %> <% end > > > > > %> > > > > > > > > > > It would be great if we could do... > > > > > > > > > > <% account.owner.tap_if(:present?) do |user| %> ... <% end %> <% > > > > > account.users.tap_if(:any?) do |user| %> ... <% end %> > > > > > > > > > > The block would only yield if the method evals to true. > > > > > > > > > > > > > > > Carlos mentioned that you can add an "if account.owner.present?" at > > > > > the end... > > > > > But there are times when the account.owner (or something else) call > > > > > is expensive and you don't want to call it twice. > > > > > > > > > > Any feedback would be much appreciated. Thanks! > > > > > > > > > > -- > > > > > You received this message because you are subscribed to the Google > > > > > Groups "Ruby on Rails: Core" group. > > > > > To post to this group, send email to rubyonra...@googlegroups.com. > > > > > To unsubscribe from this group, send email to > > > > > rubyonrails-co...@googlegroups.com. > > > > > > > > > > Visit this group at > > > > > http://groups.google.com/group/rubyonrails-core?hl=en. > > > > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > > > > > > > > > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "Ruby on Rails: Core" group. > > > To post to this group, send email to rubyonra...@googlegroups.com > > > (javascript:). > > > To unsubscribe from this group, send email to > > > rubyonrails-co...@googlegroups.com (javascript:). > > > Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. > > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Core" group. > To post to this group, send email to rubyonrails-core@googlegroups.com > (mailto:rubyonrails-core@googlegroups.com). > To unsubscribe from this group, send email to > rubyonrails-core+unsubscr...@googlegroups.com > (mailto:rubyonrails-core+unsubscr...@googlegroups.com). > Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscr...@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en. For more options, visit https://groups.google.com/groups/opt_out.