2012年4月27日金曜日

モデルでAPIを設定する

まずは表示する内容を作成します。
$ rails g controller groups index
      create  app/controllers/groups_controller.rb
       route  get "groups/index"
      invoke  erb
      create    app/views/groups
      create    app/views/groups/index.html.erb
      invoke  test_unit
      create    test/functional/groups_controller_test.rb
      invoke  helper
      create    app/helpers/groups_helper.rb
      invoke    test_unit
      create      test/unit/helpers/groups_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/groups.js.coffee
      invoke    scss
      create      app/assets/stylesheets/groups.css.scss
続いてモデルも
$ rails g model group
      invoke  active_record
      create    db/migrate/20120427055811_create_groups.rb
      create    app/models/group.rb
      invoke    test_unit
      create      test/unit/group_test.rb
      create      test/fixtures/groups.yml
マイグレーションを設定します。
class CreateGroups < ActiveRecord::Migration
  def change
    create_table :groups do |t|
      t.string :name

      t.timestamps
    end
  end
end
おきまりの〜
$ rake db:migrate
seeds/groups.rbを作成
#config: utf-8

group = Group.create!(
  :name => "グループ1"
)
モデルを作成
class Group < ActiveRecord::Base
  validates :name, :presence => true
  validates :name, :uniqueness => true

  attr_accessible :name
end
リセットします。
$ rake db:reset
routes.rbを変更します。
resources :groups, :only => [:index]
api/groups_controller.rbを作成
class Api::GroupsController < ApplicationController
  respond_to :xml, :json

  def index
    @groups = Group.order("created_at DESC")
    respond_to do |format|
      format.json { render:json => @groups.to_json }
      format.xml do
        render :xml => @groups.to_xml(
          :only => [
            :id, :name
          ],
          :skip_types => true
        )
      end
    end
  end
end
Jsonをモデルに書きます。
def as_json(options = {})
    options[:indent] ||= 2
      {
        :id => self.id,
        :name => self.name
      }
  end
これでモデルに分けて見えるようになりました。

0 件のコメント:

コメントを投稿