Rails routing format constraints

Rails routing で format を制限付けたい場合の処理。

formatの制限には例外があります。これはRequestオブジェクトのメソッドですが、すべてのパスに含まれる暗黙的なオプションのパラメータでもあります。formatの制限よりセグメント制限が優先されます。たとえば、get 'foo'、constraints: { format: 'json' }GET /fooと一致します。これはデフォルトでformatがオプションであるためです。しかし、次のようにlambdaを使うことができます。get 'foo', constraints: lambda { |req| req.format == :json } このルーティング指定は明示的なJSONリクエストにのみ一致します。

via. Rails のルーティング - Railsガイド

constraints: { format: 'json' }'とだけ書いてformat制限されるだろって思ったけどそうではないらしい。

rails/jbuilder: Jbuilder: generate JSON objects with a Builder-style DSL

rendering partial

json.partial! 'comments/comments', comments: @message.comments
# or
json.array! @posts, partial: 'posts/post', as: :post
# or
json.partial! 'posts/post', collection: @posts, as: :post
# or
json.partial! partial: 'posts/post', collection: @posts, as: :post
# or
json.comments @post.comments, partial: 'comments/comment', as: :comment

extract attribute

json.extract! @post, :id, :title, :content, :published_at