# Action sotto un diverso controller

**URL:** <https://www.ruby-forum.com/t/action-sotto-un-diverso-controller/221374>\
**Category:** IT\
**Created:** [July 11, 2012, 10:33pm UTC](https://www.ruby-forum.com/t/action-sotto-un-diverso-controller/221374 "2012-07-11T22:33:39Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![aris](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/258eb7/32.png) [@aris](https://www.ruby-forum.com/u/aris)\
**Post date:** [July 11, 2012, 10:33pm UTC](https://www.ruby-forum.com/t/action-sotto-un-diverso-controller/221374/1 "2012-07-11T22:33:39Z")

</div>

Salve a tutto il forum,

in parole povere stavolta ho il seguente problema credo che a molti sarà  
capitato questa situazione ma al momento non trovo una soluzione  
semplice a parte quella di studiarmi tutto il capitolo 2. “Routing” del  
libro di “THE RAILS 3 WAY”

ma chissa forse a quest’ora qualcuno può rispondermi e se così non e’  
almeno avrà’ finito il capitolo 2.

\*\*\*\* IL PROBLEMA \*\*\*\*

in pratica ho 2 controller

/ordine

miapp/ordine

/acquisto

miapp/acquisto

il fatto e’ che una volta completato l’ordine l’utente si trova nel  
percorso

miapp/ordine/index

e nella vista ‘index’ ho il codice

```
                   <%= form_tag :action => 'express' do %>

```

\<% end %\>

quindi lato utente nel momento che schiaccio nel bottone nella ‘image’  
viene mostrato sul browser il seguente messaggio:

No route matches {:action=\>“acquisto/express”, :controller=\>“ordine”}

‘express’ e’ un action del ‘controller’ denominato ‘acquisto’ che  
reindirizza alla pagina di pagamento di PayPal quindi penso che sia per  
questo un problema di ‘routing’

cio’ detto ho pensato che devo sistemare qualcosa nella route al momento  
ho questo:

/////////

root :to =\> ‘ordine#index’

%w(express express\_complete complete).each do |action|  
match “acquisto/#{action}” =\> “acquisto##{action}”  
end

////////

nel frattempo che qualcuno risponde vado a leggere il capitolo 2

grazie comunque,

C

---

<div class="post-metadata">

**Author:** ![cluter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@cluter](https://www.ruby-forum.com/u/cluter)\
**Post date:** [July 11, 2012, 10:48pm UTC](https://www.ruby-forum.com/t/action-sotto-un-diverso-controller/221374/2 "2012-07-11T22:48:37Z")

</div>

Io consiglierei di dare un nome sensato alle route ed evitare il  
metaprogramming delle stesse, non mi pare molto leggibile il risultato

---

<div class="post-metadata">

**Author:** ![cluter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@cluter](https://www.ruby-forum.com/u/cluter)\
**Post date:** [July 11, 2012, 10:52pm UTC](https://www.ruby-forum.com/t/action-sotto-un-diverso-controller/221374/3 "2012-07-11T22:52:03Z")

</div>

Cluter V. wrote in post #1068303:

> in pratica ho 2 controller
> 
> /ordine
> 
> miapp/ordine
> 
> /acquisto
> 
> miapp/acquisto

[…]

> \<%= form\_tag :action =\> ‘express’ do %\>

Conviene non perdere mai di vista il codice che si vuole generare, che è

Se stai usando delle risorse, /acquisto/express sarà definito in  
routes.rb come (vado a memoria)

resource :acquisto do # se l’inflection dei nomi italiani è quella…  
member do # o collection do ? te lo lascio da verificare  
post :express  
end  
end

Quindi \<%= form\_tag express\_acquisto\_path do %\> è il codice che cerchi.

Se non usi delle risorse conviene definire i nomi dei path in routes.rb  
Ad esempio

match ‘acquisto/express’, :controller =\> :acquisto, :action =\> :express,  
:as =\> :express\_acquisto\_path

renderà possibile il form\_tag di cui sopra.

Paolo
