routes.rbでデフォルト値投入をまかなう。

routes.rbでデフォルト値投入をまかなう。

退職に当たって立て続けに発生した外呑みで、しゃべりで普段使わない喉を酷使したら喉風邪みたいになってる。

前提

get 'reports/:yyyymm', to: 'reports#index'
get 'reports', to: 'reports#index'
  • yyyymmなしでのアクセスでは今日のやつを入れたい。
  • controllerではyyyymmが必ず来る前提で書いてすっきりしたい。

いけた

いろいろあって結局リダイレクトになった。

get 'reports/:yyyymm', to: 'reports#index'
get 'reports', to: redirect { "reports/#{Date.today.yyyymm}" }

だめだった

Defining Defaults

get 'reports', to: 'reports#index', yyyymm: Date.today.yyyymm

未来永劫起動時のyyyymmが来た。

get 'reports', to: 'reports#index', yyyymm: ->{ Date.today.yyyymm }
expected: "201507"
     got: #<Proc:0x007fcec1899b48@/home/ten/Dropbox/gems/dummy_app/config/routes.rb:3 (lambda)>

:pensive:

Redirection

get 'reports', to: redirect("reports/#{Date.today.yyyymm}")

未来永劫。

ところで

get 'reports', to: 'reports#index', yyyymm: Date.today.yyyymm
it do
  get :index
  expect(assigns(:yyyymm)).to redirect_to(Date.today.yyyymm)
end

ActionController::UrlGenerationError:
  No route matches {:action=>"index", :controller=>"reports"} 

どうすれば。