我有一个应用程序,在主页上的无序列表中列出了乐队节目。
<ul>
<% for show in @shows %>
<li>
<strong><%= link_to show.venue, show %></strong><br />
<%= display_date(show.show_date) %>
</li>
<% end %>
</ul>
有一个节目控制器可以处理创建节目。它在数据库中有行,如venue,show_date,show_time等。该应用程序的主页来自页面控制器。页面控制器有两个动作,用于创建主页和关于页面。
class PagesController < ApplicationController
def home
@shows = Show.find(:all, :order => :show_date)
end
def about
end
end
我遇到的问题是我只希望将show_date大于或等于Date.today的节目填充到@shows实例变量中,该变量又将填充到无序列表中。任何编写自定义查找器方法的帮助都将非常感激。使用辅助方法过滤@shows变量会更容易吗?
答案 0 :(得分:1)
以下是过滤日期的方法(这使用Rails 3的较新where(...)
语法而不是find(:all...)
)。
@shows = Show.where("show_date >= ?", Date.today).order(:show_date)
此外,在Show
模型中,您可以添加命名范围,以便在其他地方重复使用:
class Show < ActiveRecord::Base
scope :upcoming, lambda { where("show_date >= ?", Date.today).order(:show_date) }
end
然后在您的控制器中,您可以这样做:
@shows = Show.upcoming
答案 1 :(得分:0)
你可以试试这个
Show.all(:order => 'show_date desc')
或在Rails 3中
Show.order('show_date desc').all