Erreur en utilisant des méthodes privées ou protégées dans les sous-classes de ApplicationController

StackOverflow https://stackoverflow.com/questions/2327318

  •  22-09-2019
  •  | 
  •  

Question

J'ai un filtre partagé entre certains contrôleurs, Wich est principalement déclarée comme privée dans ApplicationController. Ceci définit la méthode et trouver les conditions pour les contrôleurs paginations.

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

Je reçois cette erreur:

  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'

Pourquoi il arrive?

Était-ce utile?

La solution

Vous ne pouvez pas envoyer des messages privés / protégés avec un récepteur explicite (object.protected_method) comme vous faites dans votre bloc. Vous pouvez c.send(:set_find_opts, User) ou c.instance_eval { set_find_opts(User) }.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top