- Ruby : 2.2.0
- Rails : 4.2.0
- Ember : 1.9.1
- Ember Data : 1.0.0-beta.14.1
- Handlebars : 2.0.0
- jQuery : 1.11.2
rails new ember_app -m edge_template.rb -d sqlite3 -T --javascript-engine coffee
It doesn't have to be a sqlite3.
cd ember_app
rake db:create:all
rake db:migrate
rails s
- open in browser
- Get Inspecter
- inspect controller, view
rails g ember:resource posts
app/assets/javascripts/route.coffee
EmberApp.Router.map ()->
@resource('posts')
app/assets/javascripts/templates/index.js.handlebars
rails g resource post title description:text
rake db:migrate
rails c
10.times { |i| Post.create(title:"title #{i}", description: "description #{i}") }
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
# GET /posts
# GET /posts.json
def index
render json: Post.all
end
# GET /posts/1
# GET /posts/1.json
def show
render json: @post
end
# POST /posts
# POST /posts.json
def create
@post = Post.new(post_params)
if @post.save
render json: @post, status: :created
else
render json: @post.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /posts/1
# PATCH/PUT /posts/1.json
def update
if @post.update(post_params)
head :no_content
else
render json: @post.errors, status: :unprocessable_entity
end
end
# DELETE /posts/1
# DELETE /posts/1.json
def destroy
@post.destroy
head :no_content
end
private
# Use callbacks to share common setup or constraints between actions.
def set_post
@post = Post.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def post_params
params.require(:post).permit(:title, :description)
end
end
app/assets/javascripts/controllers/posts_controller.js.coffee
EmberApp.PostsController = Ember.ArrayController.extend({
})
app/assets/javascripts/routes/posts_route.js.coffee
EmberApp.PostsRoute = Ember.Route.extend
model: ->
this.store.find('post')
setupController: (controller, model) ->
controller.set('model', model)
app/assets/javascripts/templates/posts.handlebars
rails g ember:resource post
app/assets/javascripts/router.js.coffee
EmberApp.Router.map ()->
@resource('posts')
@resource('post', { path: '/post/:post_id' })
app/assets/javascripts/templates/posts.handlebars
app/assets/javascripts/routes/post_route.js.coffee
EmberApp.PostRoute = Ember.Route.extend({
model: (params) ->
@store.find('post', params.post_id)
})
app/assets/javascripts/templates/post.handlebars
rails g ember:resource posts_new
mkdir app/assets/javascripts/templates/posts
mv app/assets/javascripts/templates/posts_new.handlebars app/assets/javascripts/templates/posts/new.handlebars
app/assets/javascripts/controllers/posts_new_controller.js.coffee
EmberApp.PostsNewController = Ember.Controller.extend({
actions:
save: ->
@model.save()
@transitionTo('posts')
})
app/assets/javascripts/router.js.coffee
@resource 'posts', ->
@route('new')
app/assets/javascripts/routes/posts_new_route.js.coffee
EmberApp.PostsNewRoute = Ember.Route.extend({
model: ->
@store.createRecord('post')
setupController: (controller, model) ->
@controller.set('model', model)
})
app/assets/javascripts/templates/posts.handlebars
app/assets/javascripts/templates/posts/new.handlebars
app/assets/javascripts/views/posts_new_view.js.coffee
EmberApp.PostsNewView = Ember.View.extend
templateName: 'posts/new'