所有对象周围的边界不是每个对象?

时间:2016-02-20 19:34:12

标签: ruby-on-rails ruby

如何围绕所有challenges-border挑战设置Date.current

第一次尝试的问题是边界是围绕每个挑战放置的,但是我希望边界围绕Date.current的所有挑战。

尝试#1

<% @challenges.each do |challenge| %>
  <% if challenge.deadline == Date.current %>
    <div class="challenges-border">
      <%= challenge.deadline %>: <%= challenge.action %>
    </div>
  <% else %>
    <%= challenge.deadline %>: <%= challenge.action %>
  <% end %>
<% end %>

enter image description here

尝试#2

我收到错误deadline未定义的方法

<% if @challenges.deadline == Date.current %>
  <div class="challenges-border">
<% end %>

<% @challenges.each do |challenge| %>
  <%= challenge.deadline %>: <%= challenge.action %>
<% end %>

<% if @challenges.deadline == Date.current %>
  </div>
<% end %>

尝试#3

这不起作用,因为我希望通过截止日期按降序组织挑战,这意味着Date.current挑战可能出现在列表的中间,而不是将它们全部列为@todays_challenges at结束。

<% @challenges.each do |challenge| %>
  <%= challenge.deadline %>: <%= challenge.action %>
<% end %>

<div class="challenges-border">
  <% @todays_challenges.each do |challenge| %>
    <%= challenge.deadline %>: <%= challenge.action %>
  <% end %>
</div>

1 个答案:

答案 0 :(得分:1)

理想情况下,您可以将@challenge分为2组,第1组分别为边框,其余为无边框:

临时解决方案

<% current_date = Date.current %>
<% current_challenges = @challenges.select{ |challenge| challenge.deadline == current_date } %>
<% remaining_challenges = @challenges - current_challenges %>

<% current_challenges.each do |challenge| %>
  <div class="challenges-border">
    <%= challenge.deadline %>: <%= challenge.action %>
  </div>
<% end %>

<% remaining_challenges.each do |challenge| %>
  <%= challenge.deadline %>: <%= challenge.action %>
<% end %>

重构解决方案

  • 将控制器中的@challenges分开
  • 将逻辑移出视图,您可以使用视图助手或查看演示者!