Rails - не может массово назначать защищенные атрибуты - PullRequest
2 голосов
/ 01 марта 2012

Я много чего прочитал об этой ошибке:

WARNING: Can't mass-assign protected attributes: contact_id, country_id, winery

Но я не понимаю, почему это появилось. Я использовал Rails 3.0.5 (и не хочу переходить на 3.1).

Мой журнал:

Started POST "/ws/webapp/services/push_item" for 127.0.0.1 at Thu Mar 01 18:45:16 +0100 2012
  Processing by Webapp::ServicesController#push_item as JSON
  Parameters: {"wine"=>{"contact_id"=>"<null>", "country_id"=>"1", "id"=>"3FAE414B-97B2-4C05-8A02-8AAC3F3B89F6", "winery"=>"New wine"}, "authenticity_token"=>"Da/2MDivaxxmS1zb7x6EK63xARnd/RrpmFoWtsOHock=", "locale"=>"ws"}
  Wine Load (0.4ms)  SELECT `wines`.* FROM `wines` WHERE `wines`.`id` = '3FAE414B-97B2-4C05-8A02-8AAC3F3B89F6' AND `wines`.`user_id` = 1 LIMIT 1
WARNING: Can't mass-assign protected attributes: contact_id, country_id, winery
3FAE414B-97B2-4C05-8A02-8AAC3F3B89F6
  SQL (0.2ms)  BEGIN
  SQL (0.2ms)  ROLLBACK
Completed 200 OK in 245ms (Views: 6.1ms | ActiveRecord: 9.5ms)

Таким образом, запрос (обновление) не работает. 3 поля contact_id, country_id, winery находятся в моей базе данных.

Есть идеи?

Ответы [ 2 ]

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

Rails использует токен подлинности при создании форм для предотвращения CSRF / XSS-атак. Если вы звоните из мобильного приложения, этого токена не будет, и вы получите какую-то ошибку.

Если вашему приложению нужно принимать запросы вне приложения Rails, вам необходимо отключить эти средства защиты для этих действий, используя:

protect_from_forgery :except => :update

или

skip_before_filter :verify_authenticity_token
1 голос
/ 01 марта 2012

Вы, вероятно, используете attr_protected в вашей модели с такой строкой где-то в ней:

attr_protected :contact_id, :country_id, :winery

Если вы хотите иметь возможность массового назначения этих атрибутов,вам нужно удалить эту строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...