LoginSignup
6
6

More than 5 years have passed since last update.

RailsでControllerだけでアソシエーションがあるModelの結果をjsonの応答で返す方法

Last updated at Posted at 2019-02-11

意外とバチっとハマる記事がなかったので、投稿。

JavascriptでAjax的な処理を書こうとするとviewを書くほどでもないActiveRecordの結果をjsonで返す処理はよく書くと思う。

特に自分の場合、複雑なGUIをJavascriptでやろうとすると必ずd3.jsを使って解決しようとしてしまうので、様々な処理をしながらもレスポンスは常にすべてのデータを返す、みたいな実装をしがちだ。

普通に検索すると以下のようなコードが見つかる。

@items = Model.all
render :json => @items

これはこれでいいのだが、belongs_toとか関連付けのあるModelの関連のModelまで取得しようと思うとなかなかピンポイントの記事がない。

結果としては、as_jsonを使うと思った通りの結果になった。
to_jsonはよくデータ出てくるのだが、いったん文字列になってしまうため、またjsonに戻さないといけない。
ということで相手のModelのidとtitleだけほしいみたいな場合は、以下のように書けばよかった。

ars = Model1.eager_load(:model2)
@items = ars.as_json(:include => {:model2 => {:only => [:id, :title]}})
render :json => @items
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6