2010-12-30 8 views
3

私は私のRails 3コントローラー、このコードを持っている:URLを変更せずに別のアクションをレンダリングしますか?

def index 
    now = Time.now.utc.strftime("%m%d") 
    redirect_to :action => "show", :id => now 
end 

def show 
    begin 
     @date = Time.parse("12#{params[:id]}") 
     dbdate = params[:id] 
    rescue ArgumentError 
     @date = Time.now.utc 
     dbdate = @date.strftime("%m%d") 
    end 

    @date = @date.strftime("%B %d") 
    @events = Event.events_for_date(dbdate) 
end 

だから基本的にインデックスがshow.html.erbビューをレンダリングし、それゆえ私はそれがショーを実行したい、ショーだけの特殊なバージョンである - しかし、私はをでない場合 redirect_toのようにURLを変更したい場合今

def index 
    now = Time.now.utc.strftime("%m%d") 
    params[:id] = now 
    show 
    render :action => "show" 
end 

、これは動作しますが、それだけでひどく臭い:

私はこのアプローチを試してみました。

私はRubyとRailsの新機能ですから、根本的に何か問題があるのか​​、それとももっと良い方法があるのだろうかと思います。

答えて

4

あなたがしていることはうまくいくようです。それを少し違ったものにすると、匂いが少し改善するかもしれませんが、違いは純粋に美容的です。

def index 
    now = Time.now.utc.strftime("%m%d") 
    params[:id] = now 
    render_show 
end 

def show 
    render_show 
end 

private 

def render_show 
    begin 
    @date = Time.parse("12#{params[:id]}") 
    dbdate = params[:id] 
    rescue ArgumentError 
    @date = Time.now.utc 
    dbdate = @date.strftime("%m%d") 
    end 
    @date = @date.strftime("%B %d") 
    @events = Event.events_for_date(dbdate) 
    render :action => 'show' 
end