【发布时间】:2016-02-19 18:55:41
【问题描述】:
我正在创建一个功能来根据我在属性上的属性(在 Rails 应用程序中)自动生成描述。
我已经创建了一系列服务类来处理这个问题——这里是
class RoomDescriptionGeneratorInternetTV < RoomDescriptionGeneratorBase
def generate
if internet? && cable_tv?
internet_and_cable_tv_sentence
elsif internet? && tv? && !cable_tv?
internet_and_tv_sentence
elsif internet? && !tv? && !cable_tv?
internet_sentence
end
end
private
def internet?
room.internet (#refers to an active record column in the room model)
end
def cable_tv?
room.cable_tv
end
def tv?
room.tv
end
# The sentences are then held in the locales for translation purposes.
def internet_sentence
t("internet")
end
def internet_and_tv_sentence
t("internet_and_tv")
end
def internet_and_cable_tv_sentence
t("internet_and_cable_tv")
end
此代码的目的是生成句子,如果这些属性当然具有这些属性,则显示为“此属性具有 [internet], and [cable TV], [TV]”。然而,这句话的使用和这个类的实例化发生在一个单独的服务对象中,使用:
class RoomDescriptionGenerator < RoomDescriptionGeneratorBase
#Other code...
def internet_tv
RoomDescriptionGeneratorInternetTV.new(room,locale).generate
end
end
if/elsif 语句与 not(!) 结合使用看起来很可怕。我正在寻找更清晰的方法来重构它,以实现基于属性生成正确句子的目标。
【问题讨论】:
-
看看建造者模式:rorandme.blogspot.nl/2012/02/…
-
请尝试在下面使用:如果互联网? && 有线电视?返回 internet_and_cable_tv_sentence
标签: ruby-on-rails ruby if-statement syntax coding-style