我正在做一个应用程序,我需要添加多个条件,如果。我想知道DRY是否存在解决方案。
我试过这样的事情,但那不行,就像https://en.m.wikipedia.org/wiki/Short-circuit_evaluation
<% @camping.situations.each do |situation| %>
<%if situation.plage == "oui" || situation.etang == "oui" || situation.lac == "oui" %>
Do that
<%else%>
Do this
<%end%>
<%end%>
我的应用程序测试超过30个条件,所以我不想重复使用多个IF。
示例: Plage = oui / etang = Non / lac = oui 我想在我看来显示:
Do that
Do this
Do that
你有什么建议吗?
对不起,我认为我的信息不明确。因此,对于每个条目,我有3个可能的值1)OUI 2)NON 3)EMPTY。用户添加其对象的值。
所以在我看来,我这样显示
<% @camping.caracteristiquetests.each do |caracteristiquetest| %>
<%if caracteristiquetest.animaux =="oui"%>animaux<%else%><s>animaux</s><%end%>
<%if caracteristiquetest.barbecue=="oui"%>barbecue<%else%><s>barbecue</s><%end%>
<%if caracteristiquetest.handicap =="oui"%>handicap<%else%><s>handicap</s><%end%>
<%if caracteristiquetest.piscine=="oui"%>piscine<%else%><s>piscine</s><%end%>
<%if caracteristiquetest.jeux =="oui"%>jeux<%else%><s>jeux</s><%end%>
<%if caracteristiquetest.loisir=="oui"%>loisir<%else%><s>loisir</s><%end%>
<%end%>
<!--Affiche les parametres de la table situation-->
<% @camping.situations.each do |situation| %>
<%if situation.plage =="oui"%>plage<%else%><s>plage</s><%end%>
<%if situation.etang =="oui"%>etang<%else%><s>etang</s><%end%>
<%if situation.montagne =="oui"%>montagne<%else%><s>montagne</s><%end%>
<%if situation.riviere =="oui"%>riviere<%else%><s>riviere</s><%end%>
<%if situation.foret=="oui"%>foret<%else%><s>foret</s><%end%>
<%end%>
如果价值与“oui”不同,我的观点会显示Strikethrough。
我有更多的条目,但它始终是相同的条件。如你所见,我有很多“IF”。所以我只想知道是否可以干这个?
答案 0 :(得分:1)
你可以这样做。
代码situation.members.any?{|m| situation.send(m) == 'oui'}
枚举您的情境对象的成员(属性),并通过对字符串'oui'发送成员名来比较它们的值,如果其中任何一个包含它,则整个表达式为真。
三元声明?对此进行评估并将“Do that”设置为true,并将“Do this”设置为其他。
situation = Struct.new(:plage, :etang, :lac)
situations = []
situations << situation.new('non','oui','non')
situations << situation.new('non','non','non')
situations.each do |situation|
puts situation.members.any?{|m| situation.send(m) == 'oui'} ? "Do that" : "Do this"
end
# gives
# Do that
# Do this
如果我理解你的上一次编辑是正确的,那么这将成为
situations.each do |situation|
situation.members.each{|member| puts situation.send(member) == 'oui' ? "Do that" : "Do this"}
end
下次你真的应该让你的问题更加清晰。 根据您上一次编辑,我的最后一次尝试,您只需要更深入一级。 我们只是给你如何做某事的方法,剩下的由你决定。 比这更干燥它不会变成..
camping = Struct.new(:situation, :caracteristiquetest)
campings = []
situation = Struct.new(:plage, :etang, :lac, :montagne, :riviere, :foret)
caracteristiquetest = Struct.new(:animaux, :barbecue, :handicap, :piscine, :jeux, :loisir)
campings <<
camping.new(situation.new('non','oui','non','non','oui','non'),
caracteristiquetest.new('non','oui','non','non','oui','non'))
campings <<
camping.new(situation.new('oui','oui','non','non','oui','non'),
caracteristiquetest.new('non','oui','non','non','non','non'))
campings.each do |camping|
camping.members.each do |camping_attr|
camping.send(camping_attr).members.each{|member|
puts camping.send(camping_attr).send(member) == 'oui' ? member : "<s>#{member}</s>"
}
end
end
哪个给出了
<s>plage</s>
etang
<s>lac</s>
<s>montagne</s>
riviere
<s>foret</s>
<s>animaux</s>
barbecue
<s>handicap</s>
<s>piscine</s>
jeux
<s>loisir</s>
plage
etang
<s>lac</s>
<s>montagne</s>
riviere
<s>foret</s>
<s>animaux</s>
barbecue
<s>handicap</s>
<s>piscine</s>
<s>jeux</s>
<s>loisir</s>