2016-12-02 3 views
0

Это поднимает «неопределенный метод привет» ошибка:Сколько рельсов обрабатывает понятие наследования, родительский доступ ребенка

class A 
    def bla 
    hi 
    end 
end 

class B < A 
    def hi 
    puts "Hii" 
    end 
end 

a = A.new 
a.bla 

У меня есть приложение Rails, что делает это:

class BlaParentController < ApplicationController 
    before_filter :setting 

    def create 
    @random_obj = ParentRandom.create(permitted_params) 
    end 
end 

class BlaController < BlaParentController 
    private 

    def setting 
    end 

    def permitted_params 
    end 
end 

вызова метода BlaController#create - BlaParentController#create. Но BlaParentController - это методы доступа permitted_params и setting от его ребенка BlaController. Как это возможно?

+0

Ваш второй пример не имеет смысла. Что такое 'ParentRandom'? Было бы также проще, если бы у вас были классы, которые являются интуитивно понятными в качестве примеров, например. 'Animal',' Dog', 'GermanShepherd', где ясно, как работает наследование. – Amadan

+0

Мне жаль, что так должно было быть. Но вы можете получить представление о родительском классе, используя методы 'разрешенные параметры и настройки 'дочернего класса – gates

ответ

0

Для обычных методов важно, определено ли это для приемника. Другие виды контекстов (например, из которых он вызван) не имеют значения. (Те немногие Исключением являются методы, такие как Kernel#__dir__, Module#nesting, Exception#backtrace.)

В первом примере, приемник является экземпляром A, но не B. Следовательно, он может получить доступ к методам в A, но не в B.

Во втором примере приемник представляет собой экземпляр BlaController, который является подклассом BlaParentController. Следовательно, он может получить доступ к методам в BlaController, а также к BlaParentController.

Смежные вопросы