WebHU - Programozási kérdések és válaszok

A Rails3 szűrőt kihagyják a gyártás során

Furcsa viselkedésem van a Rails 3.0.10-nél. Megvan ez az alkalmazásvezérlő:

app/controllers/application_controller.rb

require 'api/api_controller'

# rest not important

app/controllers/api/api_controller.rb

class Api::ApiController < ActionController::Base
   before_filter :require_user

  def require_user
    @user = User.find(xxx, yyy)
  end
end

majd ez a vezérlő:

app/controllers/api/ac_controller.rb

class Api::AcController < Api::ApiController

  before_filter :find_pool, :only => [:add_pool, :remove_pool]

  def add_pool
    # some logic that needs @user to be set
  end

  def remove_pool
    # some logic that needs @user to be set
  end

  def find_pool
    # some logic here
  end

end

A problémám az, hogy amikor ezt gyártási módban futtatom, a request_user szűrő NEM hívódik meg. Ha ezt fejlesztési módban kipróbálom, akkor működik.

Értem, hogy fejlesztési módban az osztályok újratöltés alatt állnak, de a kérdés az, hogy miért NEM hívják meg a request_user szűrőt?

Szerkesztés: Kérjük, vegye figyelembe, hogy az AC vezérlő lexikográfiailag megelőzi az API vezérlőt.


  • Az első nem úgy néz ki, mint egy alkalmazásvezérlő, legalábbis a második nem örököl tőle. 02.01.2012
  • Michal - igen elnézést, javítottam - rossz copy&paste 02.01.2012
  • Eszerint hívni kellene, de nem: rails.rubyonrails. org/classes/ActionController/Filters/ 02.01.2012

Válaszok:


1

Úgy tűnik, hogy a szükséges fájlok sorrendje probléma, vagy a ApiController kétszer töltődik be. Egyszer AcController előtt és még egyszer AcController betöltés után. Ez azt okozhatja, hogy a find_pool szűrő kiértékelésre kerül require_user előtt. A ApiController a AcController után is lex sorrendben van.

A problémát az okozhatja, hogy a require "api_controller" jelen van valahol – ezt a Railsnek kell kezelnie, és nem kell kifejezetten letenni. Tehát ha van ilyen vonal, az eltávolítása segíthet.

02.01.2012
  • Eltávolította a követelmény utasítást, ty 02.01.2012

  • 2

    A szűrők által meghívott metódusok általában NEM lehetnek nyilvánosak. A nyilvános módszereket a vezérlőkben cselekvésként kezelik. Próbáltad már require_user private metódussá tenni?

    02.01.2012
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..