declarative_authorization创建新用户的问题

时间:2010-08-06 20:34:41

标签: ruby-on-rails

我为我的应用程序使用了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"}
谁能告诉我什么是错的?为什么验证不会通过?

1 个答案:

答案 0 :(得分:0)

您是否有可能在用户身上拥有attr_accessible属性,以防止对某些属性进行大量分配,并且:roles不在那里?您会在日志中收到有关此内容的警告。 restful_authentication生成的默认User类确实包含attr_accessible调用,因此如果您使用该身份验证插件,则可能没有添加它。

用户肯定有正确类型的角色属性吗?看起来你期望角色是你表单中的单个字符串,但是在declarative_authorization的代码中你得到(roles || []).map,这表明代码的那部分至少期待一系列角色。