Rails5.1からroutes.rbで使えるようになったdirectとresolve

Rails5.1からroutes.rbでdirectとresolveというのが使えるようになったけど使ったことなかったので調べた。

direct

directはurlのaliasを作るイメージっぽい

direct :rails_guide do
  'https://railsguides.jp'
end

のようにした場合、viewでrails_guide_urlと書くとhttps://railsguides.jpになる。

blockにはurl_forの引数を返せば良いらしいので、

direct :user_search, page: 1, per: 20 do |options|
  [:users, options.merge(params.permit(:page, :per, :name))]
end

として、user_search_urlと書くとhttp://localhost:3000/users?page=1&per=20になる。

resolve

resolveはlink_toやform_forなどにModelObjectを渡したときのURL解決をいじるやーつ

resouces :users
resouces :posts

resolve 'Post' do
  [:users]
end

のようにして、link_to('hoge', @post)としたら<a href='/users'>hoge</a>になる。

ref: https://github.com/rails/rails/pull/23138/files