我想用装饰模式装饰我的3个日期,我做了实现装饰模式所需的步骤,我在装饰器中编写了以下代码来装饰我的日期字段
def date1
model.date1.strftime("%d-%m-%y")
end
def date2
model.date2.strftime("%d-%m-%y")
end
def date3
model.date3.strftime("%d-%m-%y")
end
和View我按以下方式打电话
= @example.date1
= @example.date2
= @example.date3
所以在上面装饰器中编写的所有方法都在执行相同的任务,所以我重构了一个只包含一个格式方法的基础装饰器,所以上面的装饰器继承了基础装饰器
像
class BaseDecorator < Draper::Decorator
def format_date(model_name, attribute_name)
model_name.attributes[attriburte_name].strftime("%d-%m-%Y")
end
end
我的子装饰器看起来像这样
class ExampleDecorator < BaseDecorator
def date1
format_date(model, "date1")
end
def date2
format_date(model, "date2")
end
def date3
format_date(model, "date3")
end
end
所以现在我的问题是在子装饰器中相同的代码重复,所以我想重构我的代码,我应该如何重构我的代码?
答案 0 :(得分:0)
您可以像在BaseDecorator
课程中那样重构:
class ExampleDecorator < BaseDecorator
def formatted_date(attribute_name)
format_date(model, attribute_name)
end
end
在你看来:
<%= @example.formatted_date("date1") %>