Ruby(on Rails)嵌套if语句或条件

时间:2014-03-14 14:40:47

标签: ruby-on-rails ruby if-statement

我一直在寻找改进这段代码的方法:

<% 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。 行动顺序很重要。

2 个答案:

答案 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