Я пытался разобраться в классе self
в методе present
, который Райан Бейтс использовал в своих Presenters RailsCast ( # 287 Presenters from Scratch (pro) - RailsCasts ),В видео Райан говорит: «Self - это объект шаблона, который имеет все вспомогательные методы, к которым мы хотим получить доступ», но я хотел знать класс для этого объекта.После прочтения ряда сообщений в блогах, SO-тем и документов по Ruby я начинаю думать, что self
- это своего рода структура, но я не знаю, как подтвердить это.
Мойвопросы: 1) В приведенном ниже методе present
это self
a Struct ?, и 2) Как проверить, что что-то являетсяStruct?
module ApplicationHelper
def present(object, klass = nil)
klass ||= "#{object.class}Presenter".constantize
presenter = klass.new(object, self)
yield presenter if block_given?
presenter
end
end
Я спрашиваю об этом, потому что у меня нет большого опыта работы с Struct
классами и когда я втыкаю binding.pry
в середину метода выше и пытаюсь получить имякласса для self
, я получаю больше вопросов.
- Когда я ввожу
self.class
, я получаю #<Class:0x007fb64f696268>
Интересно, может ли здесь получить Class
что у меня есть Struct
, но я не смог найти никаких документов, подтверждающих это - Когда я ввожу
self.class.class
, я получаю Class
КогдаЯ ввожу self
, я получаю обширный объект, который начинается со строк кода, перечисленных ниже
@ line 16 ApplicationHelper#present:
14: def present(object, klass = nil)
15: klass ||= "#{object.class}Presenter".constantize
16: binding.pry
17: presenter = klass.new(object, self)
18: yield presenter if block_given?
19: end
[1] pry(#<#<Class:0x007fb64f696268>>)> self
=> #<#<Class:0x007fb64f696268>:0x007fb64f6948f0
@_assigns={"marked_for_same_origin_verification"=>true},
@_config={},
@_controller=
#<PostsController:0x007fb64f6762d8
@_action_has_layout=true,
@_action_name="show",
@_config={},
@_db_runtime=0,
@_lookup_context=
#<ActionView::LookupContext:0x007fb64f6760d0
@cache=true,
@details=
{:locale=>[:en],
:formats=>[:html],
:variants=>[],
:handlers=>[:raw, :erb, :html, :builder, :ruby]},
@details_key=#<Concurrent::Map:0x007fb64f697938 entries=0 default_proc=nil>,
@prefixes=["posts", "application"],
@rendered_format=:html,
@view_paths=
#<ActionView::PathSet:0x007fb64f675fe0
Этот пост помогul, объясняя, как работает Struct, но не объясняет, как можно подтвердить, что они имеют Struct.
Изначально, когда я начал анализировать метод present
, я нашел этот ответ быть полезным.Однако я был сбит с толку комментарием, в котором говорилось, что «ModelPresenter инициализируется передачей модели и класса ApplicationHelper», поскольку ApplicationHelper является модулем.