我为我的应用程序使用了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 %>
<%= 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"}
任何人都可以告诉我什么是错的?为什么验证不会通过?
1 回答
您是否有可能在用户上拥有
attr_accessible
属性以防止某些属性的质量分配并且:roles
不在那里?您会在日志中收到有关此内容的警告 . restful_authentication生成的默认User类确实包含attr_accessible调用,因此如果您也使用该身份验证插件,则可能没有添加它 .用户肯定有正确类型的角色属性吗?看起来你已经're expecting roles to be a single string from your form but in the code from declarative_authorization you'得到了
(roles || []).map
,这表明这部分代码至少期待一系列角色 .