Cancan允许更新模型的特定属性

时间:2012-04-25 22:17:00

标签: ruby-on-rails-3 cancan

我想使用cancan来更新模型的某个属性而不是其他属性。这是我的更新操作的样子。

 class UsersController < ApplicationController
   load_and_authorize_resource

   def update
   respond_with User.update(params[:id], params[:user])
   end
 end

如果resource.instance_of?教师

 can [:read, :update], User do |user|
   resource.users.include? user
 end

我希望教师能够修改user.course_id,但没有别的。我应该如何改变

 can :update, User

做我想做的事。

1 个答案:

答案 0 :(得分:1)

嗯..我不确定cancan能力中的'动作'是否必须明确地成为控制器中的动作。如果没有,你可以做......

# ability.rb
if resource.instance_of? Teacher 
  can :update_course, User
end


# Controller
def update
  params[:user].delete(:course_id) if cannot? :update_course, User
  respond_with User.update(params[:id], params[:user])
end