私は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メソッドにアクセスできません。
ヒント:名前空間には、ネストされたクラスではなくモジュールを使用します。