ruby-on-rails - 在不更改 URL 的情况下呈现另一个 Action?

标签 ruby-on-rails ruby ruby-on-rails-3

我的 Rails 3 Controller 中有这段代码:

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 View - 但我不想像 redirect_to 那样更改 URL .

我试过这种方法:

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

现在,这有效,但它闻起来很难闻。

我是 Ruby 和 Rails 的新手,所以我想知道是否存在根本性错误或者是否有更好的方法来做到这一点?

最佳答案

你在那里做的似乎没问题。写得有点不同可能会稍微改善气味,但差异纯粹是装饰性的。

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

关于ruby-on-rails - 在不更改 URL 的情况下呈现另一个 Action?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4563537/

相关文章:

ruby - 尝试安装 pg gem : Brew bad interpreter error and not existing ruby version 时

ruby-on-rails-3 - Rails 3 通过 mongoid 适配器使用 MongoDB - 有没有办法在不使用单表继承的情况下共享属性规范?

ruby - IRB 历史不适用于 Ruby 2.3.0

ruby-on-rails - 测试是否在Ruby on Rails单元测试中调用了函数

ruby-on-rails - "Whenever"gem 在 Heroku 上运行 cron 作业

javascript - rails : In-place editor but no postback?

ruby-on-rails - rails 中的路径解析

mysql - 先有鸡还是先有蛋的电子邮件

ruby-on-rails - 可以将哈希存储在 cookie 中吗?

mysql - 获取行数在内连接 rails 范围内