我有一个带有事件的Rails应用程序,当事件的结束日期已经过去时,我想在event#show
个页面上包含一个元素,表明该事件已过期。
现在我在我的view
中有这样的逻辑:
<% if @event.end_time <= Time.now %>
<h4 class="label--warning">This event has already happened</h4>
<% end %>
我理解将逻辑排除在视图之外是好的,我不想从视图中查看数据库,所以我想知道这样做的最佳方法是什么?
答案 0 :(得分:4)
如果您正在加载@event
的页面,那么您已经访问了数据库。因此,视图中的代码不会生成额外的数据库查询。
视图中的逻辑(无论事件是否过期)可以移动到模型中。但是你仍然会在视图中有一些代码。然而,将它移动到模型的好处是可以轻松地为模型类编写测试。
型号:
def is_expired?
end_time <= Time.now
end
查看:
<% if @event.is_expired? %>
<h4 class="label--warning">This event has already happened</h4>
<% end %>
答案 1 :(得分:2)
您可以始终使用视图帮助程序,而不是在视图中使用条件逻辑。
=&GT;应用程序/助手/ expired_event.rb
Module ExpiredEvent
def event_expired?(event)
if event.end_time <= Time.now
return "<h4 class="label--warning">This event has already happened</h4>".html_safe
end
end
end
然后在你看来
<%= event_expired?(@event) %>
那样的东西?