Javascriptの中からnamed routeを使えるよ

Tsukasa OISHI

はじめてちゃんとCoffeeScriptに触りはじめているのですが、Javascript内から、Railsのroutesで定義したnamed routesを使いたくなるシーンがありました。
はて、どうやるのかなと調べてみたら、ちゃんとそのための JsRoutesというgemが作られていました。すばらしいです。

Gemfileに以下を追加します。

gem "js-routes"

bundle installしたあとで、consoleなどで以下を実行します。

9:53:24 (2.67) % bundle exec rails c
Loading development environment (Rails 4.0.0.beta1)
irb(main):001:0> JsRoutes.generate!("app/assets/javascripts/kaeru_routes.js")

第1引数には出力先のファイル名を指定します。他にもいろいろオプションが指定できるようです。

すると、app/assets/javascripts/kaeru_routes.jsというファイルが生成されます。
このファイルをmanifestファイルで指定してあげれば、あとは簡単にJavascript内からnamed routesが使えるようになります。

$ ->
  $("ul.socialButton").each ->                                                                        
    articleId = $(@).data("articleId")                                                                
    console.log(Routes.article_path(articleId))

テストで上のようにやってみると、articles/1というように、routesで定義したpathが返ってきました。
Routes.article_pathのように、Routesの関数名としてnamed routeを指定すればOKです。
素敵ですね。