需要使用> =比较rails 3的finder方法帮助

时间:2011-07-06 18:56:08

标签: ruby-on-rails-3

我有一个应用程序,在主页上的无序列表中列出了乐队节目。

<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变量会更容易吗?

2 个答案:

答案 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