在我的应用中,我可以添加优惠并给他们一个开始和结束日期,优惠显示为部分。如果开始日期是今天或更早的日期并且尚未达到结束日期,我该如何才能显示它们?
到目前为止,我有:
提供部分
<% 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错误。
在视图中进行这类检查是否可以?
非常感谢您的帮助!
答案 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 %>
希望这有帮助。