如何呈现同一文件的不同版本?

时间:2015-04-08 20:52:50

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

例如我有这个文件:

_goal.html.erb

<table>
  <tr>
    <%= goal.name %>
    <span class="label label-info"><%= goal.deadline.strftime("%d %b %Y") %></span>
  </tr>
</table>

它是从主页页面呈现的:

 <h1><b>Goals</b></h1>
   <%= render @unaccomplished_goals %>
   <%= render @accomplished_goals %>
<% end %> 

我们如何使用<span class="label label-info-success">包装完成的目标,但如果这是一个未完成的目标,请保留<span class="label label-info">

控制器

@accomplished_goals = current_user.goals.accomplished
@unaccomplished_goals = current_user.goals.unaccomplished

以下是我的最新尝试,它只是将它们全部-info

<% if @unaccomplished_goals == true %>
  <span class="label label-info"><%= goal.deadline.strftime("%d %b %Y") %></span>
<% else @accomplished_goals == true %>
  <span class="label label-warning"><%= goal.deadline.strftime("%d %b %Y") %></span>
<% end %>

也许你会有更多的运气:)

非常感谢你。

1 个答案:

答案 0 :(得分:2)

创建一个帮助方法,返回目标状态的正确类。在application_helper.rb中:

def deadline_label_class(goal)
  if goal.accomplished?
    'label label-info'
  else
    'label label-warning'
  end
end

这假定Goal有一个名为accomplished?的实例方法,它返回true / false。如果该方法不存在或使用其他一些标准,则可能必须编写该方法。

然后使用 _goal.html.erb 模板中的帮助器:

<table>
  <tr>
    <%= goal.name %>
    <span class="<%= deadline_label_class(goal) %>">
      <%= goal.deadline.strftime("%d %b %Y") %>
    </span>
  </tr>
</table>