2015-03-13 60 views
0

我在rails 4.2项目上创建了一个超级简单的“admin”部分。我用过Devise 3.4.1。更新设计用户属性不是作为当前用户

我已经为每个用户创建了一个名为role的属性,并希望“admin”用户能够更改其他用户的角色。我创建了一个表格,但是当我提交我得到这个错误:

NoMethodError in Devise::RegistrationsController#update 
undefined method `name' for nil:NilClass 

Extracted source (around line #22): 
20 # Proxy to devise map name 
21 def resource_name 
22 devise_mapping.name 
23 end 
24 alias :scope_name :resource_name 

这里是我的形式,用户可以@ user.each做一个阵营变量|用户| (@user是User.all):

<%= form_for(user, url: update_role_path(user), html: { method: :put }) do |f| %> 
    <%= f.select(:role, @roles.collect {|role| [role] }, {:include_blank => 'Please select an item'}) %> 
    <%= f.submit "Change Role", class: "btn btn-primary" %>   
<% end %> 

这里是我的路线:

put '/admin' => 'devise/registrations#update', as: "update_role" 

我已经尝试了几种不同的事情,但最后总是回到这个错误。任何帮助如何解决它将不胜感激!

回答

0

你可能会用这种错误的方式去做。而不是调用注册,而是使用更新操作创建自己的用户控制器,并通过用户#更新来更新它。

的divise控制器是针对注册行为等

+0

我想也指出,这使得它更容易,以确保用户在更新卷确实是一个管理以及使用'before_filter' – fugufish 2015-03-13 14:29:32

+0

啊!这是完全合理的。谢谢。 – zkirchin 2015-03-13 15:05:41