2020-06-16 Rails routing constraints / jbuilder
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リクエストにのみ一致します。
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