Skip to content

Don't raise NoMethodError the tried method doesn't exists #1195

Merged
merged 2 commits into from May 22, 2011

7 participants

@dmathieu

As said at the time by @rwdaigle in the edge rails blog,

If the method doesn’t exist, or if the target object nil, then nil will be returned without exceptions

That's not the case however.
Only nil returns nil for try. If the method does not exists, a NoMethoderror will be raised.

This pull request changes it.

@dhh
Ruby on Rails member
dhh commented May 22, 2011

I've been bitten by this too. Try should definitely ignore NoMethod. Thanks!

@dhh dhh merged commit 073f80e into rails:master May 22, 2011
@jake3030 jake3030 pushed a commit to jake3030/rails that referenced this pull request Jun 28, 2011
@miloops miloops Fix: counter_cache should decrement on deleting associated records.
[#1195 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
05f2183
@jake3030 jake3030 pushed a commit to jake3030/rails that referenced this pull request Jun 28, 2011
@NZKoz NZKoz Handle every error that can come out of the Iconv branch by rescuing …
…and returning nil

[#1195 state:committed]
4e4f961
@laserlemon

Could somebody please explain this change?

As I understand it, the purpose of Object#try is to call a method on an object of an expected class, but that could also be nil. In what situation would you want to silently avoid a NoMethodError? If I'm trying a method that doesn't exist in my expected class, I should know about it.

On STI objects where you might have methods defined for some records, but not for others for example.

Ruby on Rails member
Ruby on Rails member

Agreed, I think we should revert this.

-1 to this change as well. It's not acceptable to radically change the behavior at this point.

Ruby on Rails member
Ruby on Rails member

This commit 587dd7d also need to revert the fix the failing test. Or might need a fix!

587dd7d commit is not having test.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.