Backbone / Rails - сборка (params [...]) вызывает ActiveRecord :: UnknownAttributeError - PullRequest
0 голосов
/ 22 марта 2012

Я использую магистраль и пытаюсь создать новый объект, и я столкнулся с этой ошибкой. Я думал, что рельсы будут просто игнорировать атрибуты, которые не волнуют. то есть токен аутентификации не пытается быть добавлен к моему объекту.

Мой контроллер:

def create
  page = Page.find(params[:page_id])
  branch = page.page_branches.build(params[:page_branch])
  branch.form = page.form
  if branch.valid?
    page.page_branches << branch
    redirect_to(edit_page_path(page, :anchor => "branch-panel"))
  else
    raise "#{branch.errors.map}"
  end
end

Ошибка:

Processing by PageBranchesController#create as JSON
Parameters: {"page_branch"=>{"next_page_id"=>"KS5ad82889e04e5806e0455d5a81e81a9511",
 "description"=>"linking", "utf8"=>"", "authenticity_token"=>"", "id"=>nil,
 "page_id"=>"KS000c29724a16-u-2TQMP57-gYm-U", "trigger_type"=>"Always",
 "base_options"=>"AllowAnonymous;BASE",
 "question_options"=>"KS000c29724a16CfC2TQUL1--gxG-U", "keyword_options"=>"",
 "qualification"=>"", "commit"=>""}, "page_id"=>"KS000c29724a16-u-2TQMP57-gYm-U"}
WARNING: Can't mass-assign protected attributes: id
Completed 500 Internal Server Error in 239ms

ActiveRecord::UnknownAttributeError (unknown attribute: utf8):
  app/controllers/page_branches_controller.rb:21:in `create'

Благодаря ответу ниже:

Я добавил attr_accessible на моей модели рельсов:

attr_accessible :page_id, :page_name, :next_page_id, :next_page_name,
                :description, :trigger_type, :internal_qualification,
                :order, :form_id, :qualification

При этом я получаю следующие предупреждения, но сборка завершается успешно

WARNING: Can't mass-assign protected attributes: utf8, authenticity_token, id, base_options, question_options, keyword_options, commit

1 Ответ

1 голос
/ 22 марта 2012

Массовое назначение ActiveRecord будет пытаться использовать каждую пару ключ / значение в хэше, а повышает UnknownAttributeError, когда неизвестные атрибуты передаются через массовое назначение .

Может быть, проверка этот код может помочь подтвердить то, что я говорю.

Я думаю, у вас есть два варианта:

  1. Очистить params[:page_branch] перед его использованием в массовом назначении .
  2. Измените Backbone.YourModel.toJSON(), чтобы не отправлять на сервер странные атрибуты.
...