Zunächst war ich kritisch: Kann ein Konferenzbeitrag über Routing-Ansätze brauchbare Erkenntnisse bieten? Schlussendlich ist das Routing ein sehr kleiner Teil und Rails liefert einen funktionierenden Ansatz mit. Performance-Sprünge im gesamten Kontext sind nicht zu erwarten.
Interessant finde ich aber, wie durch das Entfernen der Abstraktion zwischen Router und Controller wesentliche Konzepte vereinfacht werden können. So lassen sich die unschönen Before-Action-Hooks samt Only-Beschränkungen viel eleganter ausdrücken:
route.is 'users' do authorize_user_session! route.get do @users = User.all view(:index) end route.is ':id' do |id| @user = User.find(id) route.get do view(:edit) end route.post do @user.update(params[:user]) redirect_to action: :show end end end
Dieser verschachtelte Ansatz erlaubt einen intuitiveren Blick auf das Geschehen, als es beispielsweise bei stark getrennten Ansätzen wie Rails der Fall ist:
# Routes resouces :users, only: [:index, :show, :update] # UsersController before_action :authorize_login before_action :assign_user, only: [:show, :update] def index @users = User.all end def edit end def update @user.update(params[:user]) redirect_to action: :show end private def assign_user @user = User.find(params[:id]) end
Wer sich für einen solchen Routing-Tree-Ansatz interessiert, sollte sich einmal Roda ansehen.