suppressing NoMethodError when receiver is nil, within a block
<%= @post.author.name %>
but it may be that you have no post, or the post has no author, and even if that's ok, the above would raise. I came up with a solution that lets you do the following:
<%= ifnil("no author"){ @post.author.name } %>
If at any point the receiver is nil (either @post or #author), execution of the block is stopped and the default value is returned ("no author" in this case, but defaults to nil)
NoMethodError is still raised if you send an invalid message to a non-nil receiver.
Here's the code for ifnil
def ifnil(value=nil) yield rescue NoMethodError raise unless $!.message =~ /:NilClass$/ value end