RailsのCでもVでもない場所でアプリのURIを扱う方法

API を実装していく際にリンク先の URI も加えてあげたい1場合、どこかで URI を生成する必要がある。

Grape で API を書く場合、提供される機能はあくまで endpoint 周りであって、アプリの内部実装は自分でなんとかする必要がある。Grape から使えるとしたら Rails の C でも V でもない場所にせざるを得ない。ということで C でも V でもない場所で URI を扱う方法を調べてみた。

Can Rails Routing Helpers (i.e. mymodel_path(model)) be Used in Models? - Stack Overflow

ということで

Rails.application.routes.url_helpers

を include すれば使えそうだが、その際 include する人は module でなく class でないとダメ っぽい。

これは C や V で利用することを前提に url_for() ができあがっているからか、もしくは自分が独自に作った Helper が super な url_for() を呼び出している際に何かの依存を踏んでいるからかもしれない。ちょっとよく分かっていないけど少なくとも class で include されるようにしておけば安定して動くことが分かった。

[20160731 追記] こんな記事があった。ほぼ考えてることそのまんまだった。

<a
href=”http://postd.cc/sprinkle-some-hateoas-on-your-rails-apis/”>RailsのAPIにHATEOASを散りばめてみる
RESTの拡張、HATEOASの詳解と実装例プログラミングPOSTD</a>
  1. HATEOASですね 

More