обновление записи пользователя с помощью устройства dev_one - PullRequest
1 голос
/ 11 августа 2011

Я использую devise для обработки своей аутентификации пользователя, и в своей модели пользователя я заявил, что у каждого пользователя есть has_one: role.

Я использую другую таблицу для хранения всех моих пользовательских ролей / разрешений, и мне было интересно, как обновить роль?

РЕДАКТИРОВАТЬ - вот моя модель пользователя

  has_one :role, :dependent => :destroy
  accepts_nested_attributes_for :role, :allow_destroy => true
  attr_accessible :stuff.... :role

Мой образец для подражания

 belongs_to :user

Я добавил это в мою форму:

<%= f.fields_for :role, Role.new do |r| %>
<li class="full_width">
  <%= r.label "User type" %>
  <%= r.select(:status, %w[member artist commercial],{:include_blank => false}) %>
</li>
<% end %>

но он никогда не сохраняет запись роли, я думаю, это потому, что в пользовательской модели не было attr_accessible: role, поэтому я настроил ее, и теперь при попытке сохранить я получаю ошибку AssociationTypeMismatch

РЕДАКТИРОВАТЬ - добавлен accepts_attributes_for, и теперь я не получаю сообщение об ошибке, но запись роли не сохраняется. Консольные шоу

ПРЕДУПРЕЖДЕНИЕ. Невозможно массово назначить защищенные атрибуты: role_attributes

Ответы [ 2 ]

1 голос
/ 11 августа 2011

См. http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible. Вы должны объявить

attr_accessible :role_attributes
0 голосов
/ 11 августа 2011

Из фрагмента кода, который вы вставили, не ясно, где вы строите связь между новой ролью и пользователем. Вам может потребоваться сделать что-то вроде @ user.build_role (...) или @ role.build_user (...), чтобы связать пользователя и роль перед сохранением.

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