2009-08-12 11 views
0

前には、私は次のような関係を持って言うことができます:Railsのルーティングとフィルターの質問

before_filter :get_event 

def get_event 
    @event = Event.find(params[:event_id]) 
end 

そして、私はこのようなtickets_controllerのindexアクションを持っています。

if @event == nil 
    @tickets = Ticket.all 
else 
    @tickets = @event.tickets.all 
end 

私は/チケット(イベントインスタンスが渡されていない)に行っても、私はまだイベントIDが必要だと言いますか?

私はDRYを維持しようとしています。それ以外の場合は、インデックスアクションをアクションに分割し、前のフィルタで除外します。

ヘルプに感謝!

答えて

0

あなたのbefore_filterのコードは、

@event = Event.find(params[:event_id]) 

と呼ばれている、それがEVENT_IDが必要です。

使用しているfindのバージョン、つまり特定のIDを探しているバージョンのため、RecordNotFound例外が発生しています。

あなたは

Event.first(params[:event_id]) 

を使用し、その上のゼロをチェックすることをお勧めします。

+0

理にかなっている!感謝ラズを助けて! – drpepper

0

それを処理するための他の方法は、indexアクションからフィルタを除外することです:

before_filter :get_event, :except => [:index] 

そして、indexアクションに

@events = Event.all 

を配置します。おそらく限定された数のイベントを一覧表示するだけなので、おそらく:

@events.Event.all(:limit => 10) 
0

まず、event_idの存在を確認する必要があります。私はそれを行うだろう

@event = Event.find(params[:event_id]) if params[:event_id] 
0

方法は

begin 
    @event = Event.find(params[:event_id]) 
rescue ActiveRecord::RecordNotFound 
    # do nothing -- can be written to do redirects but not necessary here 
end 

また、あなたは他にはない限り、混乱しますので、ないunless @eventに注意してください(if [email protected]としてif @event == nilを書くことができている。