Надеюсь, кто-то может помочь мне в этом, это просто сводит меня с ума!
По сути, я создал систему аутентификации в своем приложении, используя Devise и CanCan, которая прекрасно работает.Проблема возникает, когда я пытаюсь назначить роль пользователю при регистрации, роль пользователя не сохраняется, регистрация прошла успешно, но у пользователя нет назначенной роли.В моей консоли роль пользователей выглядит как ноль!
Я установил связь HABTM между пользователями и ролями и попробовал различные варианты.Rails Console возвращает User Role: nil, даже если я ввожу роль String в форму регистрации.
Я новичок в Rails и программировании в целом, буду очень признателен за помощь!Большое спасибо
Модель пользователя:
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :username, :password, :password_confirmation, :remember_me, :role_ids
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
end
Фрагмент из новой регистрации:
<fieldset>
<legend>Sign Up</legend>
<div class="inputs">
<%= f.input :username, :required => true, :autofocus => true %>
<%= f.input :email, :required => false, :autofocus => true %>
<%= f.input :password %>
<%= f.input :password_confirmation, :label => "Confirm Password" %>
</div>
<div>
<%= f.input :roles, :required => true, :collection => Role.find(:all).collect {|c| [ c.name, c.id ]}, :label => "Role" %>
</div>
Params
Processing by Devise::RegistrationsController#create
asПараметры HTML: {"commit" => "Зарегистрироваться", "authenticity_token" => "1HCmfOVATkz / LbALboU + Z2Bg / lBQseVNB2NeAG7GPHc =", "utf8" => "✓", "user" => {"password_confirmation" =>"[FILTERED]", "username" => "test", "role_ids" => ["2"], "password" => "[FILTERED]", "email" => "test@test.com"}}
[1m [35mRole Load (0.1ms) [0m ВЫБРАТЬ «Роли». * FROM "Роли" ГДЕ "Роли". "Id" = 2 ПРЕДЕЛ 1 [1m [36mSQL (0.1ms) [0m[1mSELECT 1 FROM "users" WHERE ("users". "Email" = 'test@test.com') LIMIT 1 [0m
[1m [35mAREL (0.3ms) [0m INSERT INTO "users" ("reset_password_token)"," role "," email "," Remember_created_at "," current_sign_in_ip "," encrypted_password "," updated_at "," creation_at "," sign_in_count "," username "," last_sign_in_at "," reset_password_sent_at "," last_sign_in_ip ""current_sign_in_at") VALUES (NULL, NULL, 'test@test.com', NULL, NULL, '$ 2a $ 10 $ 8J6F2NgkK6Tas0AVMiocUujimZ7K3XcYFSmWGeYUzmGDN55WVUHxO ',' 2011-07-10 23: 30: 45.820893 ',' 2011-07-10 23: 30: 45.820893 ', 0,' test ', NULL, NULL, NULL, NULL)
[1 м [36mSQL(0.1ms) [0m [1mINSERT INTO "role_users" ("role_id", "user_id") ЗНАЧЕНИЯ (2, 33) [0m [1m [35mAREL (0.1ms) [0m UPDATE "пользователи" SET "current_sign_in_ip" = '127.0.0.1 ', "updated_at" =' 2011-07-10 23: 30: 45.827053 ', "sign_in_count" = 1, "last_sign_in_at" =' 2011-07-10 23: 30: 45.826761 ', "last_sign_in_ip" =' 127.0.0.1 ', "current_sign_in_at" =' 2011-07-10 23: 30: 45.826761 'ГДЕ "пользователи". "Id" = 33
Перенаправлено на http://localhost:3000/ Завершено 302 Найдено за 163 мс