我一直在寻找改进这段代码的方法:
<% if A || B %>
<a></a>
<ul>
<% if A %>
<li>Action A</li>
<% end %>
<li>Action C</li>
<% if B %>
<li>Action B</li>
<% end %>
</ul>
<% end %>
这涉及评估A,最终B,然后再A和B再次。关于如何改进代码的任何想法?
P.S。 行动顺序很重要。
答案 0 :(得分:1)
在您的控制器中:
@action_list = []
if A || B
@action_list << "Action A" if A
@action_list << "Action C"
@action_list << "Action B" if B
end
在您看来:
<% if @action_list.count > 0 %>
<a></a>
<ul>
<% @action_list.each do |action| %>
<li><%= action %></li>
<% end %>
</ul>
<% end %>
答案 1 :(得分:0)
我会采用与msergeant相同的方法,但坚持这样一个类:
class ActionListItems
def initialize(a = nil, b = nil)
@a = a
@b = b
end
def render?
!!(@a || @b)
end
def each
yield "Action A" if @a
yield "Action C"
yield "Action B" if @b
end
end
action_list_items = ActionListItems.new "a", "b"
puts action_list_items.render?
#=> true
action_list_items.each do |item|
puts item
end
#=> Action A
#=> Action C
#=> Action B