Я пишу докладчик.Я хочу делегировать атрибут метода Model.Я написал следующий код.
app / Presenters / model_presenter.rb
class ModelPresenter
include HTMLBuilder
attr_reader :object, :view_context
delegated_methods = ActionView::Base.instance_methods(true)
delegated_methods -= Object.instance_methods(true)
delegate *delegated_methods, to: :view_context
def initialize(object, view_context)
@object = object
@view_context = view_context
end
app / Presenters / staff_member_presenter.rb
class StaffMemberPresenter < ModelPresenter
delegated_methods = StaffMember.instance_methods(true)
delegated_methods -= ActiveRecord::Base.instance_methods(true)
delegate *delegated_methods, to: :object
Я думаю, что ActiveRecord.instance_methods включает методы атрибутов, такие как электронная почта, имя, фамилия, имя, приостановка и т. Д.но это не включаетПосле запуска StaffMember.new.email это включает в себя приостановлено и приостановлено?и так далее.Я думаю, что эта причина в том, что ActiveRecord динамически определяет методы атрибута (такие как электронная почта, имя_первой).поэтому я решил эту проблему с помощью следующего кода.
app / Presenter / staff_member_presenter.rb
class StaffMemberPresenter < ModelPresenter
StaffMember.new.created_at
delegated_methods = StaffMember.instance_methods(true)
delegated_methods -= ActiveRecord::Base.instance_methods(true
delegate *delegated_methods, to: :object
Я думаю, что есть более простой способ, чем приведенный выше.Если вы знаете простой способ, вы можете сказать мне это?