имя пользовательской переменной экземпляра в load_and_authorize_resource канкана?

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 ?

Я думаю, что мне не хватает знаний, чтобы понять канкан (я новичок в рельсах) и использовать его с последних 4 дней, надеясь, что этот вопрос имеет смысл.


person codemilan    schedule 02.12.2014    source источник


Ответы (2)


Ресурс не загружается, если переменная экземпляра уже установлена. Это упрощает переопределение поведения через фильтр 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'

person roarfromror    schedule 03.12.2014
comment
Большое спасибо, за решение. - person codemilan; 03.12.2014

Q1. Для UsersController это будет @user

Q2. Если у вас есть правильные маршруты, вы можете использовать

load_and_authorize_resource :custom_model_name

Также вам будет полезно https://github.com/CanCanCommunity/cancancan

person AlexMrKlim    schedule 02.12.2014
comment
Алексей, спасибо, проблему понял. - person codemilan; 03.12.2014