我为我的应用程序使用了declarative_authorization,并且在创建新用户时遇到了问题。
我的用户型号代码:
class User < ActiveRecord::Base ROLE_TYPES = ["admin", "user", "guest"] validates_inclusion_of :roles, :in => ROLE_TYPES def role_symbols @role_symbols ||= (roles || []).map{|r| r.to_sym} end
我的观看代码:
<% form_for(@user) do |f| %> ... <p> <%= f.label :roles %><br /> <%= f.select :roles, User::ROLE_TYPES, :prompt => "Select a role" %> </p> <%= f.submit 'Add User' %> <% end %>
每当我尝试创建新用户并从下拉列表中选择角色时,视图投诉:
Roles is not included in the list
从脚本/服务器的输出,我可以看到角色实际设置:
"user"=>{"name"=>"kc", "password_confirmation"=>"kc", "roles"=>"guest", "password"=>"kc", "email"=>"kc@one.com"}谁能告诉我什么是错的?为什么验证不会通过?
答案 0 :(得分:0)
您是否有可能在用户身上拥有attr_accessible
属性,以防止对某些属性进行大量分配,并且:roles
不在那里?您会在日志中收到有关此内容的警告。 restful_authentication生成的默认User类确实包含attr_accessible调用,因此如果您使用该身份验证插件,则可能没有添加它。
用户肯定有正确类型的角色属性吗?看起来你期望角色是你表单中的单个字符串,但是在declarative_authorization的代码中你得到(roles || []).map
,这表明代码的那部分至少期待一系列角色。