如何渲染同一文件的不同版本?

How to render different versions of the same file?

例如我有这个文件:

_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 %>

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

非常感谢。

创建一个 returns 正确 类 目标状态的辅助方法。在 application_helper.rb:

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

这假设 Goal 有一个名为 accomplished? 的实例方法,其中 returns true/false。如果该方法不存在或使用其他一些条件,您可能必须编写该方法。

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

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