2010-02-24 2 views
1

У меня есть фильтр, совместно используемый некоторыми контроллерами, который в основном объявляется как private в ApplicationController. Этот метод устанавливает условия поиска и разбиения на страницы для контроллеров.Ошибка при использовании частных или защищенных методов в подклассах ApplicationController

class ApplicationController < ActionController::Base 
    ... 
    protected # or private 
    # Define parametros de busca 
    def set_find_opts(klass) 
     @filter = params[:f].to_i || nil 

     @order = klass.set_order params[:o] 

     @opts = { :page => params[:page] } 
     @opts[:order] = @order if @order 
    end 
    ... 
end 

class Admin::UsersController < AdminController 
    ... 
    before_filter(:only => :index) {|c| c.set_find_opts User } 
    ... 
end 

Я получаю эту ошибку:

1) Error: 
test_should_get_index(Admin::UsersControllerTest): 
NoMethodError: protected method `set_find_opts' called for #<Admin::UsersControl 
ler:0x848f3ac> 
    app/controllers/admin/users_controller.rb:4 
    functional/admin/users_controller_test.rb:9:in `test_should_get_index' 

Почему это происходит?

ответ

0

Вы не можете отправлять личные/защищенные сообщения с помощью явного приемника (object.protected_method), который вы делаете в своем блоке. Вы можете попробовать c.send(:set_find_opts, User) или c.instance_eval { set_find_opts(User) }.

+0

Я подозревал это, но я бы не хотел публиковать или использовать send (: some_thing). Большое спасибо. – nanda

Смежные вопросы