Railsでテーブルと連携しないモデルを使う方法

photo credit: Andrew* via photopin cc

APIとしてRailsの特定URLにアクセスされた際にJSONを返す機能を実装する必要が出てきた。これは既に存在するテーブルからデータを取得し、それをJSONで返す、という機能なので、rails generate modelでモデルを生成すると、DBと自動的に関連付けられてしまうのでNG。ぐぐってみたものの、テーブルと連携しないモデルをgenerateする方法が見つけられなかった。そのため、Fat Controllerだよなぁ〜と思いつつ、Controllerに実装してからmerge requestを送ったら、以下の指摘を受けた。

Api を作る class を作りましょう。
controller からはこの class を使って model を作ってください。
fat controller も避けられるし、testable になります。

やはりFat Controllerはダメだったか…というわけで、generateで対応するのではなく、自分の手で一から書くことで対応した。

やったこと

  • テストコードの追加
  • モデルクラスを新規にエディタで作成し、コントローラーからモデルにメソッドを移動

rails generate modelのオプションでActiveModelを生成するやつないのね。