我怎样才能显示尚未到期的记录(字段)?

时间:2011-09-28 14:46:46

标签: ruby-on-rails datetime activerecord partial-views validation

在我的应用中,我可以添加优惠并给他们一个开始和结束日期,优惠显示为部分。如果开始日期是今天或更早的日期并且尚未达到结束日期,我该如何才能显示它们?

到目前为止,我有:

提供部分

  <% if offer.date_from > Date.today && offer.date_to < Date.today %>
    <div class="offer_partial">
      <div class="offer_title">
        <%= offer.title %>
      </div>

      <div class="offer_body">
        <%= offer.body %>
      </div>                 
    </div>
  <% end %>

但是这给出了一个未定义的方法`&gt;'为nil:NilClass错误。

在视图中进行这类检查是否可以?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

首先回答你的第二个问题,不,你应该通过控制器中的查询构建一个Offer模型的集合,从而使视图只是遍历该集合并呈现HTML。

此外,if块不能满足您的要求。您说“今天的日期或更早”,但您要查看今天的日期或更晚。你似乎已经颠倒了逻辑。

您获得的错误意味着 date_from 为零。您是在验证这些字段还是允许它们具有零值?

这就是我设置该集合的方式:

class Offer < AR::Base
  scope :end_date_not_reached, where("date_from <= ?", Date.today).where("date_to > ?", Date.today)
end

在控制器中:

@offers_in_progress = Offer.end_date_not_reached

在视图中:

<% @offers_in_progress.each do |offer| %>
  <!-- stuff here -->
<% end %>

希望这有帮助。