Action sotto un diverso controller

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

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

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