У меня есть обратный вызов и метод, определенные в родительском классе Rails STI.Rails STI, callbacks и public vs. private
class Parent < ActiveRecord::Base
before_save :populate_name
# implicitly public
def populate_name
self.name = "foobar"
end
class Child < Parent
end
Когда я делаю populate_name private
или protected
так:
class Parent < ActiveRecord::Base
before_save :populate_name
private
def populate_name
self.name = "foobar"
end
class Child < Parent
end
Тогда я получаю эту ошибку:
NameError - undefined local variable or method `populate_name' for #<Child:0x007ff901eace30>:
activemodel (3.2.16) lib/active_model/attribute_methods.rb:407:in `method_missing'
activerecord (3.2.16) lib/active_record/attribute_methods.rb:149:in `method_missing'
activesupport (3.2.16) lib/active_support/callbacks.rb:407:in `_run__3119425560225797910__save__1411052685854526397__callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.16) lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
activesupport (3.2.16) lib/active_support/callbacks.rb:81:in `run_callbacks'
activerecord (3.2.16) lib/active_record/callbacks.rb:264:in `create_or_update'
activerecord (3.2.16) lib/active_record/persistence.rb:84:in `save'
activerecord (3.2.16) lib/active_record/validations.rb:50:in `save'
activerecord (3.2.16) lib/active_record/attribute_methods/dirty.rb:22:in `save'
activerecord (3.2.16) lib/active_record/transactions.rb:259:in `block (2 levels) in save'
activerecord (3.2.16) lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'
activerecord (3.2.16) lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
activerecord (3.2.16) lib/active_record/transactions.rb:208:in `transaction'
activerecord (3.2.16) lib/active_record/transactions.rb:311:in `with_transaction_returning_status'
activerecord (3.2.16) lib/active_record/transactions.rb:259:in `block in save'
activerecord (3.2.16) lib/active_record/transactions.rb:270:in `rollback_active_record_state!'
activerecord (3.2.16) lib/active_record/transactions.rb:258:in `save'
app/controllers/child_controller.rb:135:in `create_or_update'
требуется public
для обратного вызова?