2011-07-06 1 views
0

ホームページの順序付けられていないリストにバンドショーをリストするアプリがあります。> =比較レール3を使用してファインダーメソッドの助けが必要

<ul> 
<% for show in @shows %> 
    <li> 
    <strong><%= link_to show.venue, show %></strong><br /> 
    <%= display_date(show.show_date) %> 
    </li> 
<% end %> 
</ul> 

ショーの作成を処理するショーコントローラがあります。データベースには会場、show_date、show_timeなどの行があります。アプリのホームページはページコントローラから来ています。ページコントローラには、ホームページと約ページを作成する2つのアクションがあります。

class PagesController < ApplicationController 
    def home 
    @shows = Show.find(:all, :order => :show_date) 
    end 

    def about 
    end 
end 

私がいる問題は、私は唯一のshow_date以上Date.todayに等しいとのショーは順番に番号なしリストの中に取り込まれます@showsインスタンス変数に移入さにしたいということです。カスタムファインダメソッドを作成する助けがあれば幸いです。ヘルパーメソッドを使って@shows変数をフィルタリングする方が簡単でしょうか?

答えて

1

を試すことができますがここでは(これは代わりにfind(:all...)のRailsの3の新しいwhere(...)構文を使用します)日付をフィルタする方法です。

また
@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 
+0

これは私が必要としたものであり、美しく動作します!スコープは天才です!ありがとうDylan – Grizlord

0

あなたはこの

Show.all(:order => 'show_date desc') 

またはレール3に

Show.order('show_date desc').all 
+0

レコードの順序がうまくいきます。今日の日付より古い日付の番組を削除したいので、順序付けされていないリストにそれらを表示しません。私はデータベースから削除したくないだけです。 – Grizlord

+0

申し訳ありませんが私は誤解しました –

+0

問題はありませんジョエル、とにかくあなたの答えに感謝!ディランは上記の完璧な答えを出しました。 – Grizlord

関連する問題