如何使用Best_In_Place和Cancan更新受限模型中的特定属性

时间:2014-01-14 05:15:32

标签: ruby-on-rails cancan best-in-place

当使用Cancan和Best_In_Place时,如果他/她无法更新该模型的其他属性,怎么能说'老师'只更新模型的某些属性(比如模型'book')。我知道Cancan尚不支持属性授权,因为它仍然在2.0中进行开发,所以我认为首先要使用这样的东西:

cannot :all, Book
if is_teacher?
    can :update_certain_attribute, Book
end

但是因为我想使用Best_In_Place,我的初步研究告诉我,我只能使用属性进行Best_In_Place更新 如下所示

<%= best_in_place @book, :certain_attribute, :type => :input %>

而不是方法:

<%= best_in_place @book, :update_certain_attribute, :type => :input %>

处理这个问题的最佳方法是什么?谢谢:))

1 个答案:

答案 0 :(得分:0)

更新为讨论两件事

这将确保变量属性可访问,因此如果更新使用best_in_place,模型/控制器将不允许变量实际更新

为此,我认为您需要查看动态属性可访问性。 Ryan在这里有一个很好的演员http://railscasts.com/episodes/237-dynamic-attr-accessible

要在best_in_place上使用cancan获得条件,您可以使用以下代码

这再次对特定属性没有帮助,但与动态属性相关联将确保变量不会被更改