2014-12-02 7 views
1

users_controller.rbимя переменной настраиваемого экземпляра в cancan's load_and_authorize_resource?

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

Q.1> Если 'load_and_authorize_resource' называется то, что экземпляр переменной будет загружаться?
Q.2> Если он загружает @user или @users, то как заставить его загружать на @object?

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

ответ

1

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

+0

Большое спасибо за решение. – codemilan

1

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

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

load_and_authorize_resource :custom_model_name 

Кроме того, это будет полезно для вас https://github.com/CanCanCommunity/cancancan

+0

Спасибо, Алекс, я узнал о проблеме. – codemilan