Railsで指定URLへのアクセスがあった際にJSONを返却する

Railsで指定URLへのアクセスがあった際にJSONを返却するすごい基本的なことだと思うんですが。あと、他にもいくつかの方法があるとは思うのですがとりあえずメモ的に。

コード

Bookモデルがあり、name, price, created_atのアトリビュートを持っているという前提です。

app/controllers/books_controller.rb

def show
  @book = Book.find(params[:id])
  respond_to do |format|
    format.json
  end
end

app/views/books/show.json.jbuilder

json.extract! @book, :id, :name, :price, :created_at

結果はこれ。

{
    "created_at": "2014-10-19T11:52:43.961Z", 
    "id": 1, 
    "name": "Book 1", 
    "price": 1000
}

もうちょっと応用的なのはこんな感じ。

json.extract! @book, :price
json.name_with_id "#{@book.id} - #{@book.name}"
json.publisher do
  json.name @book.publisher.name
  json.address @book.publisher.address
end
unless @book.high_price?
  json.low_price true
end

結果はこれ。

{
    "low_price": true, 
    "name_with_id": "1 - Book 1", 
    "price": 1000, 
    "publisher": {
        "address": "Ichigaya", 
        "name": "Gihyo inc."
    }
}

結構簡単なんだなぁ。

環境

  • Rails 4.1.6

参考書籍

ちなみに、89ページに記載がありますが、app/views/books/show.json.jbuilderのところが、app/views/books/show.jbuilder.jsonと間違って記載されていました〜。

Pocket
LINEで送る

You may also like...