I just wondered why a private before_validation method is not called
when an ActiveRecord object is saved? When it's public, then it works...
Why is that? In my opinion, the before_validation method should
intuitively rather be private...
Ruby's private and protected members aren't very private or protected.
It's more of an "intent" thing than a hard rule.
#!/usr/bin/env ruby
class Foo
private
def hidden
puts "I am hidden"
end
end
f = Foo.new
begin
f.hidden
rescue
puts "Can't run hidden: #{ $! }"
end
f.send( :hidden )
./private.rb
Can't run hidden: private method `hidden' called for #<Foo:0xb7c2f92c>
I am hidden
What's happening to you is the filter execution only sees private
methods. It's looking for the method name, doesn't find it, and
doesn't run it. Look to see how it appears and disappears from the
private methods list when you move it around.