Я пытаюсь настроить приложение Rails 3 для обработки пользовательских ролей с помощью Devise и CanCan.
Мои отношения таковы
class User < ActiveRecord::Base
has_many :users_roles
has_many :roles, :through => :users_roles
end
class Role < ActiveRecord::Base
has_many :users_roles
has_many :users, :through => :users_roles
end
class UsersRole < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
На самом деле все работает нормально. Devise отлично справляется с аутентификацией. CanCan ограничивает поведение пользователя в зависимости от способности.
Но у меня нелепая проблема с настройкой UserRole.
Я установил флажки на странице редактирования пользователя следующим образом.
<% for role in Role.all %>
<%= check_box_tag "user[role_ids][]", role.id, @user.roles.include?(role) %>
<%=h role.name.camelize %>
<% end %>
<%= hidden_field_tag "user[role_ids][]", "" %>
Если я создаю UserRole через консоль, эти флажки устанавливаются в соответствии с ролью пользователя.
Но я не могу устанавливать или изменять роли с помощью этих флажков!
Я был по всему дому с этим - вариациями синтаксиса, переключением на подход HABTM и role_mask, несколько раз перестраивал мои модели и контроллеры - все безрезультатно.
На самом деле название моего вопроса не совсем корректно - флажки ставят
_method put
authenticity_token XGl6s1iyXJfahdgftc3df8q1ZeehMVzs3LxiQH98jGw=
commit Update
user[current_password] password
user[email] user@example.com
user[name] User Name
user[password]
user[password_confirmatio...
user[role_ids][] 1
user[role_ids][] 4
user[role_ids][]
utf8 ✓
Но эти значения не устанавливаются в базе данных.
Что я делаю не так ?? !!!