Настройка Backbone Mongoid Rails не позволит мне обновить запись - PullRequest
1 голос
/ 13 февраля 2012

Может кто-нибудь помочь мне понять, как заставить скринкаст Райана Бэйта на Backbone.js работать с MongoDB в качестве моей базы данных при использовании драгоценного камня Mongoid.

Это то, что я вижу.

Когда я создаю новую запись через консоль, подобно тому, как Райан делал это в видео с entry.create, Rails добавляет эту запись просто отлично. Ниже приведены мой журнал Ruby и мой журнал заголовков JavaScript от Chrome Inspector.

Ruby Log

Started POST "/api/entries" for 127.0.0.1 at 2012-02-12 17:31:24 -0600
Processing by EntriesController#create as JSON
Parameters: {"name"=>"Heather", "entry"=>{"name"=>"Heather", "action"=>"create",         "controller"=>"entries"}}
MONGODB w_market_development['system.namespaces'].find({})
MONGODB           w_market_development['entries'].insert([{"_id"=>BSON::ObjectId('4f384bcc504b9348be000003'),     "name"=>"Heather"}])
Completed 201 Created in 11ms (Views: 2.4ms)

Журнал заголовков

Request URL:http://0.0.0.0:3000/api/entries
Request Method:POST
Status Code:201 Created
Request Headers (14)
Request Payload
{"name":"Heather"}

Как видите, выложено нормально. Теперь позвольте мне показать вам обновление на примере entry.save(), который показал нам Райан.

Ruby Log

Started POST "/api/entries" for 127.0.0.1 at 2012-02-12 17:34:25 -0600
Processing by EntriesController#create as JSON
Parameters: {"_id"=>"4f38152c504b9345dc000005", "name"=>"Bloip", "winner"=>true,     "entry"=>{"_id"=>"4f38152c504b9345dc000005", "name"=>"Bloip", "winner"=>true,     "action"=>"create", "controller"=>"entries"}}
MONGODB w_market_development['system.namespaces'].find({})
MONGODB     w_market_development['entries'].insert([{"_id"=>BSON::ObjectId('4f38152c504b9345dc000005'),     "name"=>"Bloip", "winner"=>true}])
Completed 201 Created in 12ms (Views: 2.7ms)

Журнал заголовков

Request URL:http://0.0.0.0:3000/api/entries
Request Method:POST
Status Code:201 Created
Request Headers (14)
Request Payload
{"_id":"4f38152c504b9345dc000005","name":"Bloip","winner":true}

Как вы можете видеть, когда я завершаю entry.save() для текущей записи, которая должна быть обновлением, JSON показывает POST вместо PUT, с которым Mongoid ничего не делает, а DB не показывает никаких изменений. После поиска в Google я нашел следующие статьи, но ничего не помогло.

https://github.com/codebrew/backbone-rails/issues/8 http://lostechies.com/derickbailey/2011/06/17/making-mongoid-play-nice-with-backbone-js/

1 Ответ

2 голосов
/ 19 февраля 2012

Когда я проходил через RailsCast, как описано выше.Я использовал контроллер записей, который собрал Райан.После долгих поисков, копирования, вставки и повторных попыток я обнаружил, что мне нужен полностью новый контроллер.Ниже приведено то, что у меня изначально было.

class EntriesController < ApplicationController
  respond_to :json

  def index
    respond_with Entry.all
  end

  def show
    respond_with Entry.find(params[:id])
  end

  def create
    respond_with Entry.create(params[:entry])
  end

  def update
    respond_with Entry.update(params[:id], params[:entry])
  end

  def destroy
    respond_with Entry.destroy(params[:id])
  end
end

Это код контроллера, который исправил проблему для меня.

class EntriesController < ApplicationController
  def index
      render :json => Entry.all
    end

    def show
      render :json => Entry.find(params[:id])
    end

    def create
      entry = Entry.create! params
      render :json => entry
    end

    def update
      entry = Entry.find(params[:id])
      entry.update_attributes!(params[:entry])
      render :json => entry
    end

    def destroy
      render :json => Entry.destroy(params[:id])
    end
  end

Спасибо всем!

Трэвис

...