我使用基于Devise,CanCanCan和Rolify的应用来处理私人资源。
使用Rolify(https://github.com/RolifyCommunity/rolify)为用户分配不同的角色。
我希望能够访问网络管理员,然后他可以通过用户界面为用户分配多个角色。
用户控制器:
def update
@user = User.find(params[:user_id])
params[:user][:role_ids] ||= []
if @user.update_attributes(params[:user_id])
redirect_to users_path, :flash => { :success => 'User was successfully updated.' }
else
redirect_to users_path, :flash => { :error => 'User was unsuccesfully updated.' }
end
端
查看:
可通过路线访问:
get "users/:user_id/edit" => 'user#edit', :as => :edit_user
HTML:
<%= form_for @user do |f| %>
<% Role.all.each do |role| %>
<%= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include?(role.id) %>
<%= role.name %><br />
<% end %>
<%= f.submit %>
<% end %>
路线:
match "users/:user_id" => 'user#show', via: [:get], :as => :user
但是,当我点击&#34;更新用户&#34;时,我收到以下错误:
我知道如何解决这个问题才能使我的表单正常工作吗?
答案 0 :(得分:2)
您有show
行动的路线,可通过get
访问。您还应该有update
行动路线,可通过patch
访问。您可以使用resources
:
resources :users, only: [:show, :update, :edit]