Commit 9cf4e9d8

mo khan <mo@mokhan.ca>
2014-06-29 04:07:41
load categories in the new cake form.
1 parent cff3acf
Changed files (8)
app
assets
javascripts
controllers
views
config
app/assets/javascripts/backbone/models/category.js.coffee
@@ -0,0 +1,10 @@
+class CakeSide.Models.Category extends Backbone.Model
+  paramRoot: 'category'
+
+  defaults:
+    name: null
+    slug: null
+
+class CakeSide.Collections.CategoriesCollection extends Backbone.Collection
+  model: CakeSide.Models.Category
+  url: '/api/v1/categories'
app/assets/javascripts/backbone/templates/cakes/new.jst.ejs
@@ -27,11 +27,9 @@
           <label class="control-label">Category</label>
           <div class="controls">
             <select id="cake_category_id" name="category_id">
-              <option value="15" selected="selected">Cake</option>
-              <option value="12">Cake Pop</option>
-              <option value="13">Cookie</option>
-              <option value="3">Cup Cake</option>
-              <option value="16">Other</option></select>
+              <% _.each(categories, function(category) { %>
+              <option value="<%= category.id %>"><%= category.name %></option>
+              <% }); %>
             </select>
           </div>
         </div>
app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
@@ -65,3 +65,9 @@ class CakeSide.Views.Cakes.NewView extends Marionette.ItemView
   disableSaveButton: ->
     @ui.save_button.attr('disabled', 'disabled')
 
+  serializeData: ->
+    {
+      cake: @model.toJSON(),
+      categories: CakeSide.Application.request('CategoriesRepository').toJSON(),
+    }
+
app/assets/javascripts/backbone/cakeside.js.coffee
@@ -24,9 +24,14 @@ window.CakeSide =
         Backbone.history.start()
 
     @cakes = new CakeSide.Collections.CakesCollection()
+    @categories = new CakeSide.Collections.CategoriesCollection()
+    @categories.fetch(reset: true)
+
     CakeSide.Application.reqres.setHandler 'CakesRepository', =>
       @cakes
-    CakeSide.Application.reqres.setHandler 'PhotosRepository', (cake_id) =>
+    CakeSide.Application.reqres.setHandler 'CategoriesRepository', =>
+      @categories
+    CakeSide.Application.reqres.setHandler 'PhotosRepository', (cake_id) ->
       photos = new CakeSide.Collections.PhotosCollection(cake_id: cake_id)
       photos.fetch(reset: true)
       photos
app/controllers/api/v1/categories_controller.rb
@@ -0,0 +1,11 @@
+module Api
+  module V1
+    class CategoriesController < ApiController
+      respond_to :json
+
+      def index
+        respond_with(@categories = Category.all)
+      end
+    end
+  end
+end
app/views/api/v1/categories/_category.json.jbuilder
@@ -0,0 +1,3 @@
+json.id category.id
+json.name category.name
+json.slug category.slug
app/views/api/v1/categories/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @categories do |category|
+  json.partial! 'category', category: category
+end
config/routes.rb
@@ -46,9 +46,10 @@ Cake::Application.routes.draw do
 
   namespace :api, :defaults => { :format => 'json' }  do
     namespace :v1 do
-      resources :cakes, :only => [:index, :show, :create, :update] do
-        resources :photos, :only => [:index, :create]
+      resources :cakes, only: [:index, :show, :create, :update] do
+        resources :photos, only: [:index, :create]
       end
+      resources :categories, only: [:index]
       resources :logins, :only => [:create]
     end
   end