私はBook < LibraryItem
およびaBook::Pageは、次のように定義されます。
class Book
class Page
models / book/page.rbにあります
LibraryItemと呼ばれるメソッドがありますcan_edit?
しかし、私Book::Page.new.can_edit?はメソッドエラーを返しません...
LibraryItem名前空間にからのインスタンスメソッドを含めるにはどうすればよいですか?
私はBook < LibraryItem
およびaBook::Pageは、次のように定義されます。
class Book
class Page
models / book/page.rbにあります
LibraryItemと呼ばれるメソッドがありますcan_edit?
しかし、私Book::Page.new.can_edit?はメソッドエラーを返しません...
LibraryItem名前空間にからのインスタンスメソッドを含めるにはどうすればよいですか?
Pageメソッドがないため、これはエラーを返しますcan_edit?。ABookにはPageクラスがPageありますが、アイテムのサブクラスではありませんLibrary(のみBookです)。したがってcan_edit?、に対しては有効ですBookが、に対しては有効ではありませんPage。
試す
p Book::Page.superclass
そして、あなたは得るでしょうObject
このコードをirbコンソールで実行する場合、Rubyはデフォルトで親メソッドにアクセスします。
class LibraryItem
def can_edit?
true
end
end
class Book < LibraryItem
class Page
end
end
can_editに簡単にアクセスできますか?メソッド、実行するだけです:
book = Book.new
book.can_edit?
ただし、Pageクラスからは、継承チェーン上にないため、LibraryItemメソッドにアクセスできません。
ヒント:名前空間には、ネストされたクラスではなくモジュールを使用します。