前回に引き続き、backbone.jsを利用してjqueryでMVCの世界を、rails3と共に作っていこうと思います。
今回はデータのやり取りをする所までが目標です。
■モデル/コントローラ等を作成する
$ rails g scaffold post title:string body:text published:boolean
$ rake db:migrate
$ rake spec (とりあえずrspecが動くか確認しとく)
$ rake spec:rcov (ついでにrcovが動くか確認しとく)
$ rails s
ここで http://localhost:3000/posts でいつもの画面が表示されてればOK!
■json入出力用にコントローラを修正する
とりあえずjsonでやり取りできるように変更します。params.exceptはbackboneとのやり取りを考慮してます。
class PostsController < ApplicationController respond_to :json def index @posts = Post.all respond_with @posts end def show @post = Post.find(params[:id]) respond_with @post end def create @post = Post.new(params.except(:action, :controller)) respond_to do |format| if @post.save format.json { render :json => @post, :status => :created, :location => @post } else format.json { render :json => @post.errors, :status => :unprocessable_entity } end end end def update @post = Post.find(params[:id]) respond_to do |format| if @post.update_attributes(params.except(:id, :action, :controller, :created_at, :updated_at)) format.json { head :ok } else format.json { render :json => @post.errors, :status => :unprocessable_entity } end end end def destroy @post = Post.find(params[:id]) @post.destroy respond_to do |format| format.json { head :ok } end end end
■jsonのフォーマットを変更する
このままだと下記の用に"post"が付いてしまうので、backbone側の期待と異なります。
http://localhost:3000/posts.json
=> [{"post":{"body":"a","created_at":"2011-01-19T16:13:47Z","id":1,"published":false,"title":"aa","updated_at":"2011-01-19T16:13:47Z"}}]
http://localhost:3000/posts/1.json
=> {"post":{"body":"a","created_at":"2011-01-19T16:13:47Z","id":1,"published":false,"title":"aa","updated_at":"2011-01-19T16:13:47Z"}}
config/initializers/include_root_in_json.rbの様なファイルを作成し
ActiveRecord::Base.include_root_in_json = false
とすると下記の様な感じでgoodです!
http://localhost:3000/posts.json
=> [{"body":"a","created_at":"2011-01-19T16:13:47Z","id":1,"published":false,"title":"aa","updated_at":"2011-01-19T16:13:47Z"}]
http://localhost:3000/posts/1.json
=> {"body":"a","created_at":"2011-01-19T16:13:47Z","id":1,"published":false,"title":"aa","updated_at":"2011-01-19T16:13:47Z"}
■backbone用のcontorollerを作成
コントローラ/ビューを追加して必要な設定を追加します。
$ vim controllers/home_controller.rb
class HomeController < ApplicationController def index end end
$ vim config/routes.rb
root => "home#index"
$ rm public/index.html
$ mkdir views/home
■backbone.jsを使ってみる
$ vim views/home/index.html.erb
http://localhost:3000/ を開いて、画面に味気ないalertが表示されればOkay!!
railsのログとDB見てると少しは楽しいかも
次は画面を作っていきましょう!
0 件のコメント:
コメントを投稿