Why need before_validation etc methods be public?

Joshua Muheim wrote:

Hi all

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...

Thanks Josh

Nobody knows this?

Hi Josh,

OK, thank you. I don't really get why Ruby handles protected this way, but at least I know how, now. :slight_smile:

OK, thank you. I don’t really get why Ruby handles protected this way,

but at least I know how, now. :slight_smile:

Most languages which has this protected keyword handles it this way. Another option would be

to do something like this:

class SomeModel < ActiveRecord::Base

before_validation :some_method

private

def some_method

end

end

Now, the callback is properly registered and the method, some_method, can be

properly invoked at the appropriate time.

Good luck,

-Conrad

Nobody knows this?

No.. it's just that no one cares :slight_smile:

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.

u = User.find(:first) u.private_methods

OK, strange. Anyway, thanks to you guys!