Ruby on rails 为什么在我的应用程序中创建的用户帐户不记得在注册时为他们选择的角色?

Ruby on rails 为什么在我的应用程序中创建的用户帐户不记得在注册时为他们选择的角色?,ruby-on-rails,ruby-on-rails-3,authentication,devise,cancan,Ruby On Rails,Ruby On Rails 3,Authentication,Devise,Cancan,希望有人能在这件事上帮助我,这绝对让我发疯 基本上,我已经使用Desive和CanCan在我的应用程序上创建了一个身份验证系统,效果很好。当我尝试在注册时为用户分配角色时,问题出现了,用户角色不保存,注册成功,但用户没有分配角色。在我的控制台中,用户角色显示为nil 我已经在用户和角色之间建立了HABTM关联,并尝试了各种选项。Rails控制台返回User Role:nil,即使我在注册表单中以字符串形式输入该角色 我对Rails和编程都是新手,非常感谢一些帮助我的人!非常感谢 用户模型: cl

希望有人能在这件事上帮助我,这绝对让我发疯

基本上,我已经使用Desive和CanCan在我的应用程序上创建了一个身份验证系统,效果很好。当我尝试在注册时为用户分配角色时,问题出现了,用户角色不保存,注册成功,但用户没有分配角色。在我的控制台中,用户角色显示为nil

我已经在用户和角色之间建立了HABTM关联,并尝试了各种选项。Rails控制台返回User Role:nil,即使我在注册表单中以字符串形式输入该角色

我对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 
作为HTML参数:{commit=>Sign 向上的 真实性标志=>1HCmfOVATkz/LbALboU+Z2Bg/lBQseVNB2NeAG7GPHc=, utf8=>✓, 用户=>{密码\确认=>[已筛选], 用户名=>test,角色ID=>[2], 密码=>[FILTERED], 电子邮件=>test@test.com}}

[1m[35m最大载荷0.1ms[0m]选择 角色。*来自角色,其中 roles.id=2限制1[1m[36mSQL 0.1ms[0m[1ms从用户中选择1 WHERE users.email= 'test@test.com'限值1[0m [1m[35mAREL 0.3ms[0m插入 用户重置\u密码\u令牌, 角色、电子邮件、, 还记得你在, ip中的当前符号, 加密密码,更新地址为, 在创建,在计数中签名, 用户名,上次登录时间:, 重置密码发送到, 最后一次在ip中签名, 值为NULL时的当前符号, 空,'test@test.com'零,零,零,, “$2a$10$8J6F2NGKK6TAS0AVMIOCUJIMZ7K3XYFSMWGEYUZMGDN55WVUHXO”, '2011-07-10 23:30:45.820893', '2011-07-10 23:30:45.820893', 0, “测试”,NULL,NULL,NULL,NULL,NULL [1m[36mSQL 0.1ms[0m[1m插入 角色\用户角色\ id,用户\ id 数值2,33[0m[1m[35mAREL 0.1ms[0m更新用户集 ip中的当前符号='127.0.0.1', 更新时间:2011年7月10日 23:30:45.827053',登录计数=1, 最后签字时间='2011-07-10 23:30:45.826761',最后一次登录= “127.0.0.1”,当前登录位置= '2011-07-10 23:30:45.826761'在哪里 users.id=33

重定向到 完成302 发现于163ms


经过多次调查,这个问题提出了另一个问题,但在这里没有真正的问题。

嗨,伙计,当我这样做时,我得到:关联类型不匹配错误..Role2172989180预期,得到String2148287480{commit=>注册,Authentity\u token=>81y79qcxoxmh/eKOM6ugM//H2JPCL85QZRxKHTDUGG=,utf8=>,用户名=>test,密码=>[FILTERED],角色=>2,电子邮件=>test@test.com}}你能给我一个例子来说明你的意思吗?我已经尝试过这种方法和各种教程中显示的方法,但没有任何帮助…然而,当我像下面这样制作表单的角色部分时,我没有发现关联类型不匹配,但它仍然没有将角色分配给用户:可以吗你可以发布参数吗?如果我有问题,请道歉!-哪个参数?:在你的日志中{commit=>注册,authenticity\u token=>81y79qcxoxmh/eKOM6ugM//H2JPCL85QZRxKHTDUGG=,utf8=>–œ“,…对不起!添加到问题的末尾!谢谢你的时间!
<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>
Processing by Devise::RegistrationsController#create