Подтвердить что ты не робот

Ошибка Rails: невозможно назначить защищенные атрибуты

Я пытаюсь создать чрезвычайно простое приложение реселлеров AddressBook. Тем не менее, я получаю эту ошибку: "Невозможно назначить защищенные атрибуты: city_id". Как я могу это исправить? Пожалуйста, не стесняйтесь добавлять комментарии или предложения к вашему ответу относительно кода рельсов ниже. Спасибо.

Как я создал проект (с нуля):

rails new demo
rails generate model City name:string
rails generate scaffold User name:string city:references
rake db:migrate

db/seeds.db:

City.create(name: "City1")
City.create(name: "City2")
City.create(name: "City3")

rake db: seed

изменил эту строку <%= f.text_field :city %> от app/views/users/_form.html.erb до <%= f.collection_select :city_id, City.all, :id, :name %>

изменено user.rb автоматически сгенерированная строка belongs_to :city до has_one :city.

добавлено belongs_to :city в city.rb

P.S: Я использую Rails 3.2.3 и Ruby 1.9.3.

4b9b3361

Ответ 1

Были важные рельсы изменения безопасности 3.2.3, которые требуют, чтобы вы разрешили массовое присвоение явно, установив config.active_record.whitelist_attributes в false

http://weblog.rubyonrails.org/2012/3/30/ann-rails-3-2-3-has-been-released/

http://www.h-online.com/security/news/item/Rails-3-2-3-makes-mass-assignment-change-1498547.html

альтернативно (и лучше) вместо того, чтобы разрешать массовое осциллирование, вам просто нужно установить attr_accessible для атрибутов в вашей модели, которые вы хотите изменить, например.

attr_accessible :city_id, :name # list all fields that you want to be accessible here

Пожалуйста, ознакомьтесь с руководством по безопасности рельсов для получения дополнительной информации о массовом назначении в рельсах.

Ответ 2

или вы можете изменить

config.active_record.mass_assignment_sanitizer = :strict 

к

config.active_record.mass_assignment_sanitizer = :logger 

Я не знаю, почему было изменено на :logger, но это решение для ошибки.

Ответ 3

Просто укажите поле данных в модели как:

attr_accessible :city_id