# Scope dinamico delle routes - problemi con i test

**URL:** <https://www.ruby-forum.com/t/scope-dinamico-delle-routes-problemi-con-i-test/217488>\
**Category:** IT\
**Created:** [March 2, 2012, 9:20pm UTC](https://www.ruby-forum.com/t/scope-dinamico-delle-routes-problemi-con-i-test/217488 "2012-03-02T21:20:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [March 2, 2012, 9:20pm UTC](https://www.ruby-forum.com/t/scope-dinamico-delle-routes-problemi-con-i-test/217488/1 "2012-03-02T21:20:08Z")

</div>

Ciao a tutti,  
Sto tentando di venire a capo di un grattacapo particolare. Ho  
un’applicazione che ha tutti gli URL in uno scope dinamico

scope “/:agency” do  
resources :users  
end

Scope “accompagnato” da questa modifica delle default\_url\_options in un  
before\_filter

def default\_url\_options(options={})  
{ :agency =\> params[:agency] }  
end

in modo da visualizzare gli utenti solo legati a una certa agenzia.  
Tutto funziona bene da web server, ma nella configurazione di test  
Cucumber/RSpec/Capypara il primo parametro trovato viene messo al posto  
dell’agenzia.  
Per esempio user\_path(User.first) diventa [http://www.example.com/1/users](http://www.example.com/1/users)  
anzich [http://www.example.com/theagency/users/1](http://www.example.com/theagency/users/1)

Ho provato con un default allo scope

scope “/:agency”, defaults: { agency: ‘test-agency’} do  
resources :users  
end

Ma se i test passano, ora tutti gli url vengono costruiti con  
test-agency come primo parametro, anzich riportare il primo parametro  
dell’url.

Qualche consiglio su come risolvere o aggirare questo problema?

Grazie,

Alessandro

---

<div class="post-metadata">

**Author:** ![alexpescara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b487fb/32.png) [@alexpescara](https://www.ruby-forum.com/u/alexpescara)\
**Post date:** [March 5, 2012, 9:09am UTC](https://www.ruby-forum.com/t/scope-dinamico-delle-routes-problemi-con-i-test/217488/2 "2012-03-05T09:09:13Z")

</div>

Il 02/03/2012 21:19, Alessandro M. ha scritto:

> def default\_url\_options(options={})  
> { :agency =\> params[:agency] }  
> end

cos a occhio, come prima cosa imposterei un valore di default nel caso  
non sia  
presente il params[:agency]

inoltre fai attenzione a sovrascrivere il default url proprio perch  
potresti  
incontrare comportamenti inaspettati. tu sei sei sicuro che TUTTE le  
url,  
compresa la hom page, abbiano quel parametro?

> in modo da visualizzare gli utenti solo legati a una certa agenzia. Tutto  
> funziona bene da web server, ma nella configurazione di test  
> Cucumber/RSpec/Capypara il primo parametro trovato viene messo al posto  
> dell’agenzia.

> Per esempio user\_path(User.first) diventa [http://www.example.com/1/users](http://www.example.com/1/users) anzich  
> [http://www.example.com/theagency/users/1](http://www.example.com/theagency/users/1)
> 
> Ho provato con un default allo scope
> 
> scope “/:agency”, defaults: { agency: ‘test-agency’} do  
> resources :users  
> end

al posto dello lo scope, usa una nested route, qualcosa del genere (ma  
sei  
libero di modificare le varie opzioni):

resources :agencies do  
resources :users  
end

in questo modo le rotte manterrebero i giusti parametri nella url:

[http://www.example.com/](http://www.example.com/)\<agency\_id\>/users/\<user\_id\>

e la named route diventerebbe: agency\_user\_path

> Ma se i test passano, ora tutti gli url vengono costruiti con test-agency come  
> primo parametro, anzich riportare il primo parametro dell’url.

normale, non solo hai sovrascritto le opzioni dei parametri, hai anche  
impostato un valore di default 😉

puoi approfondire qui:

> **[Rails Routing from the Outside In — Ruby on Rails Guides](https://guides.rubyonrails.org/routing.html)**
>
> This guide covers the user-facing features of Rails routing.After reading this guide, you will know: How to interpret the code in config/routes.rb. How to construct your own routes, using either the preferred resourceful style or the match method....

ciao,  
A.

---

<div class="post-metadata">

**Author:** ![alexpescara](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b487fb/32.png) [@alexpescara](https://www.ruby-forum.com/u/alexpescara)\
**Post date:** [March 5, 2012, 10:09am UTC](https://www.ruby-forum.com/t/scope-dinamico-delle-routes-problemi-con-i-test/217488/3 "2012-03-05T10:09:14Z")

</div>

> Il 02/03/2012 21:19, Alessandro M. ha scritto:
> 
> > def default\_url\_options(options={})  
> > { :agency =\> params[:agency] }  
> > end
> 
> cos a occhio, come prima cosa imposterei un valore di default nel caso non sia  
> presente il params[:agency]

S, non ho riportato il codice pi corrente ma invece di params[:agency]  
chiamo un metodo che ritorna params[:agency] o un valore di default 🙂

> inoltre fai attenzione a sovrascrivere il default url proprio perch potresti  
> incontrare comportamenti inaspettati. tu sei sei sicuro che TUTTE le url, compresa  
> la hom page, abbiano quel parametro?

Lo devono avere perch una sorta di applicazione multisito. Da quel  
parametro dipendono grafica e altri aspetti.

> al posto dello lo scope, usa una nested route, qualcosa del genere (ma sei  
> libero di modificare le varie opzioni):
> 
> resources :agencies do  
> resources :users  
> end

In effetti come capita sempre la cosa pi semplice quella a cui non si  
pensa mai 🙂 L’unico problema di questo approccio che dovrei cambiare  
tutte le named routes all’interno dell’applicazione e sarebbe un po’  
pesante come cosa. Vedo un po’ che succede.

> > Ma se i test passano, ora tutti gli url vengono costruiti con test-agency come  
> > primo parametro, anzich riportare il primo parametro dell’url.
> 
> normale, non solo hai sovrascritto le opzioni dei parametri, hai anche  
> impostato un valore di default 😉

Pensavo (speravo) che per defaults si intendesse “se questo valore non  
definito dalla request”, e non “metti 'sto valore sempre e comunque” 😃

Per ora grazie!

Alessandro
