From the commit:
Don't raise a NoMethodError if the target does not respond_to?
method. This excludes methods on target that are implemented using
method_missing. And if the method really doesn't exist,
target.send(method, args) will raise a NoMethodError itself...so
let it do that.
Description:
If I have a model like this:
class User < ActiveRecord::Base
# Provide is_admin?, is_guest? account type discovery methods def
method_missing(method_id, *arguments)
if match = /^is_(\w+)\?$/.match(method_id.to_s)
self.account_type == match[1]
else
super
end
end end
class Activity < ActiveRecord::Base
belongs_to :user end
I can't do Activity.first.user.is_guest? because it raises a
NoMethodError. The problem is that the Association Proxy only
allows calling methods on the target that respond_to?(method). It
doesn't need to do this check, because if the method
really doesn't exist, the call to target.send(method,
args) will raise NoMethodError itself, so nothing is gained by
doing that check in the proxy.