开发者

Why don't the User accounts created in my app remember the Role selected for them on sign up?

Hopefully someone can help me on this one, it's absolutely driving me crazy!

Basically, I have created an Authentication system on my app, using Devise and CanCan, which works fine. The problem arises when I try to assign a Role to a User on signup, the Users Role does not save, the sign-up is successful, but the User has no assigned Role. In my Console the Users Role comes up as nil!

I've set up a HABTM association between Users and Roles, and tried various options. Rails Console returns User Role:nil even if I input the role as a String in the sign-up form.

I am new to Rails and programming in general, would really appreciate some assistance people! Many Thanks in

User Model:

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 

Snippet from New Registration View:

<fieldset> 
<legend>Sign Up</legend>

<div class="inputs">
<%= f.input :username, :required => true, :autofocus => true %>
<%= f.input :email, :required => false, :autofocus => true %>
<%= f.i开发者_运维技巧nput :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 Parameters: {"commit"=>"Sign up", "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 SELECT "roles".* FROM "roles" WHERE "roles"."id" = 2 LIMIT 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", "created_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)

[1m[36mSQL (0.1ms)[0m [1mINSERT INTO "roles_users" ("role_id", "user_id") VALUES (2, 33)[0m [1m[35mAREL (0.1ms)[0m UPDATE "users" 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' WHERE "users"."id" = 33

Redirected to http://localhost:3000/ Completed 302 Found in 163ms


After many investigations, this question raised another question but no real here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜