Рендеринг другого действия без изменения URL? - PullRequest
3 голосов
/ 30 декабря 2010

У меня есть этот код в моем контроллере Rails 3:

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

Таким образом, по сути, index - это просто специализированная версия show, поэтому я хочу, чтобы он выполнял show, отображая представление show.html.erbно я не хочу изменить URL, как это делает redirect_to.

Я пробовал этот подход:

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

Теперь это работает, но просто плохо пахнет.

Я новичок в Ruby и Rails, поэтому мне просто интересно, есть ли что-то принципиально неправильное или есть лучший способ сделать это?

1 Ответ

4 голосов
/ 30 декабря 2010

То, что вы там делаете, похоже, хорошо. Написание немного по-другому может немного улучшить запах, но различия чисто косметические.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...