Forum: Italian Ruby user group Problema indirizzamento controller-vista

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Davide S. (Guest)
on 2008-11-07 17:24
Ho messo in una vista:


<%= link_to 'Visualizza', :controller => :questions, :action => :arg %>


...e la relativa azione del controller risulta così:


def arg
  @questions = Question.find_all_by_admin_id(session[:admin_id],:order
=> 'pubblica asc, id asc')

  respond_to do |format|
    format.html # arg.html.erb
    format.xml  { render :xml => @questions }
  end
end


Non capisco perchè non mi funziona. L'azione index del controller è
implementata in modo identico, eppure quella funziona.
L'azione "arg" invece non funziona per niente.

Idee a riguardo ?

PS. L'errore che mi segnala è: "Couldn't find Question with ID=arg"
Davide S. (Guest)
on 2008-11-07 18:18
Ho notato che se al posto di link_to uso button_to funziona...
Qualcuno mi sa spiegare questo comportamento anomalo ?

Io comunque ho bisogno di usare un link_to, qualcuno sa come fare ?
Davide S. (Guest)
on 2008-11-07 19:04
Ho capito che il problema non è nel link, ma nel controller:

def arg
  @questions = Question.find(:all)

  respond_to do |format|
    format.html
    format.xml  { render :xml => @questions }
  end
end

Perchè questa azione del controller non funziona ??
Eppure è identica all'azione index dello stesso controller (anche le
viste sono identiche).
Fabrizio R. (Guest)
on 2008-11-07 19:21
(Received via mailing list)
Che cosa è che non funziona?
Ricevi un errore? Che tipo di errore?
Che versione di Rails?

Isola la richiesta che ti da errore nei log e postala con tutto lo
stacktrace.



Il giorno 07/nov/08, alle ore 18:04, Davide S. ha scritto:
Davide S. (Guest)
on 2008-11-07 19:24
Fabrizio R. wrote:
> Che cosa � che non funziona?
> Ricevi un errore? Che tipo di errore?
> Che versione di Rails?

Rails versione 2.0.2
L'errore visualizzato dal browser è "Couldn't find Question with
ID=arg".

> Isola la richiesta che ti da errore nei log e postala con tutto lo
> stacktrace.

Non ho idea di cosa stai parlando, potresti essere più dettagliato ? Ho
appena iniziato con Ruby on Rails...
Fabrizio (Guest)
on 2008-11-07 19:36
(Received via mailing list)
Quando fai delle richieste nel browser, nella console vengono stampate
delle cose. Quello è il log, lo stesso che trovi in
log/development.log.
Copia e incolla  nell'email  la parte relativa alla chiamata che
genera l'errore.

così, a naso, direi che in routes.rb qualcosa non va.

Lancia il comando 'rake routes' e controlle che l'azione arg ci sia.
Se non c'è la devi impostare nel file routes.rb


2008/11/7 Davide S. <removed_email_address@domain.invalid>:
Fabrizio (Guest)
on 2008-11-07 19:37
(Received via mailing list)
Prova a cambiare la riga
map.resouces :questions

in

map.resources :questions, :collection => {:arg => :get}


2008/11/7 Fabrizio <removed_email_address@domain.invalid>:
Davide S. (Guest)
on 2008-11-07 20:28
Ti metto quello che dice la console, perchè il file di log dice
tutt'altro:

127.0.0.1 - - [07/Nov/2008:19:22:03 ora solare Europa occidentale] "GET
/questions/arg HTTP/1.1" 404 11311
- -> /questions/arg

Cos'è il file routes.rb ? Devo aggiornarlo ogni volta che creo una nuova
azione ?

> Prova a cambiare la riga
> map.resouces :questions
>
> in
>
> map.resources :questions, :collection => {:arg => :get}

Dove devo cambiarlo ?
Davide S. (Guest)
on 2008-11-07 20:45
Fabrizio wrote:
> Prova a cambiare la riga
> map.resouces :questions
>
> in
>
> map.resources :questions, :collection => {:arg => :get}
>
>
> 2008/11/7 Fabrizio <removed_email_address@domain.invalid>:

In questo modo funziona, ma qual è il significato del parametro
aggiuntivo ?
E poi, ogni volta che creo una nuova azione devo intervenire sul file
routes.rb ?
Davide S. (Guest)
on 2008-11-07 20:47
Altra cosa: perchè l'azione "index" non necessita di questa modifica e
funziona normalmente senza di essa ?
Fabrizio R. (Guest)
on 2008-11-08 09:20
(Received via mailing list)
Ciao Davide,
eccomi con le dovute spiegazioni.

Da una certa versione di rails in poi, (non ricordo quale) è stato
introdotto il concetto di 'risorse'.
Se un controller è definito come 'risorsa', allora non puoi aggiungere
azioni liberamente come hai fatto con l'azione 'arg'.
L'azione 'index' funzionava perchè rientra nelle azioni default delle
risorse.
La modifica la file routes.rb è necessaria quando, lavorando con una
risorsa, le azioni default non coprono i tuoi bisogni.

Iniziare lo sviluppo in Rails senza avere ben presente cosa sono le
risorse e cos'è il paradigma REST può essere alquanto doloroso.
Ti consiglio di iniziare da qui:
http://api.rubyonrails.org/classes/ActionControlle...


Il giorno 07/nov/08, alle ore 19:47, Davide S. ha scritto:
This topic is locked and can not be replied to.