【问题标题】:custom instance variable name in cancan's load_and_authorize_resource?cancan的load_and_authorize_resource中的自定义实例变量名称?
【发布时间】:2015-01-30 11:08:41
【问题描述】:

users_controller.rb

class UsersController < ApplicationController  
  def index
    @objects = User.filter(params: params)
  end
end  

Q.1 > 如果调用了“load_and_authorize_resource”,那么它将加载什么实例变量?
Q.2 > 如果它加载 @user 或 @users 那么如何让它加载到 @object 上?

我认为我缺乏足够的知识理解 cancan(我是 Rails 新手),并且从过去 4 天开始使用它,希望这个问题有意义。

【问题讨论】:

    标签: ruby-on-rails-4 ruby-2.1


    【解决方案1】:

    如果实例变量已设置,则不会加载资源。这使得通过对某些操作的 before_filter 覆盖行为变得容易 - 从 cancan https://github.com/ryanb/cancan/blob/master/lib/cancan/controller_additions.rb 第 34 和 35 行,所以你可以在你的控制器中这样做 -

    before_filter :set_instance_variable  
    load_and_authorize_resource  
    private  
      def set_instance_variable
        @object = "blah blah blah"  
      end  
    

    load_and_authorize_resource 应在设置实例变量后调用,即在 'before_filter :set_instance_variable' 之后调用

    【讨论】:

    • 非常感谢您的解决方案。
    【解决方案2】:

    第一季度。对于 UsersController,它将是 @user

    第二季度。如果你有正确的路线,你可以使用

    load_and_authorize_resource :custom_model_name
    

    另外,对你有用https://github.com/CanCanCommunity/cancancan

    【讨论】:

    • 谢谢 Alex,我知道了问题所在。
    猜你喜欢
    • 1970-01-01
    • 2015-08-30
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多