我正在创建一个功能来自动生成基于属性的属性(在Rails应用程序中)的描述。Ruby if语句 - 如何避免多个elsif语句不包括
我已经创作了一系列服务类来处理这一点 - 这里是
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
的这段代码的目的是生成句子读取“这个属性[互联网]和[有线电视] ,[电视]“如果这些财产当然有这些属性。使用这句话和这个类的instantuation的但发生在使用一个单独的服务对象:(!)
class RoomDescriptionGenerator < RoomDescriptionGeneratorBase
#Other code...
def internet_tv
RoomDescriptionGeneratorInternetTV.new(room,locale).generate
end
end
使用IF/ELSIF statments联合不只是看起来可怕。我正在寻找更明确的方法来重构这个,以达到根据属性生成正确句子的目的。
看一看Builder模式:HTTP:// rorandme .blogspot.nl/2012/02/some-simple-design-patterns-in-ruby.html –
只要尝试使用以下内容: 如果互联网? && 有线电视?返回internet_and_cable_tv_sentence –