# Problemi viste - controller

**URL:** <https://www.ruby-forum.com/t/problemi-viste-controller/146582>\
**Category:** IT\
**Created:** [August 22, 2008, 3:46pm UTC](https://www.ruby-forum.com/t/problemi-viste-controller/146582 "2008-08-22T15:46:06Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![cereal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/7feea3/32.png) [@cereal](https://www.ruby-forum.com/u/cereal)\
**Post date:** [August 22, 2008, 3:46pm UTC](https://www.ruby-forum.com/t/problemi-viste-controller/146582/1 "2008-08-22T15:46:06Z")

</div>

Salve,  
avrei un problema con una vista (eventi.erb.html) e la funzione (eventi)  
assocciata nel controller. In pratica tramite un link cerco di accedere  
alla vista suddetta solo che una volta cliccato sul link mi da errore di  
oggetto vuoto riferendosi al metodo show(del controller user) e non a  
quello eventi.

class UsersController \< ApplicationController

…  
#Parte relativa agli eventi dell’utente  
def eventi  
@user = User.find(:first, :conditions =\>[“id = ?”,  
session[:user\_id]])  
end  
…

end

codice del link  
\<%= link\_to(“MyEvent”, :controller =\> “Users”, :action =\> “eventi”) %\>

e questo Ã¨ l’errore che mi riporta

ActiveRecord::RecordNotFound in UsersController#show  
Couldn’t find User with ID=eventi

---

<div class="post-metadata">

**Author:** ![cereal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/7feea3/32.png) [@cereal](https://www.ruby-forum.com/u/cereal)\
**Post date:** [August 22, 2008, 10:46pm UTC](https://www.ruby-forum.com/t/problemi-viste-controller/146582/2 "2008-08-22T22:46:00Z")

</div>

E’ evidente che non viene presa in considerazione l’azione eventi.  
Controlla il file routes.rb. Se users è gestito come risorsa, allora  
devi usare le azioni REST o definire esplicitamente le altre azioni.  
Se non è definito come risorsa, allora entrano in gioco le ultime due  
righe del file routes.rb (attive di default).

Alessandro P. ha scritto:

---

<div class="post-metadata">

**Author:** ![cereal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/7feea3/32.png) [@cereal](https://www.ruby-forum.com/u/cereal)\
**Post date:** [August 23, 2008, 1:32am UTC](https://www.ruby-forum.com/t/problemi-viste-controller/146582/3 "2008-08-23T01:32:57Z")

</div>

Grazie della risposta ma ho cercato un po di documentazione sulle azioni  
REST ma non ho capito come definire esplicitamente le altre azioni… il  
mio file routes.rb Ã¨ il seguente

ActionController::Routing::Routes.draw do |map|  
map.resources :towns

map.resources :events

map.resources :users

# Install the default routes as the lowest priority.

map.connect ‘:controller/:action/:id’  
map.connect ‘:controller/:action/:id.:format’

end

Scusatemi se le mie domande sono un po “sempliciotte” ma sono un niubbo  
e non riesco ancora a muovermi bene in rails.

---

<div class="post-metadata">

**Author:** ![cereal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/7feea3/32.png) [@cereal](https://www.ruby-forum.com/u/cereal)\
**Post date:** [August 23, 2008, 11:57am UTC](https://www.ruby-forum.com/t/problemi-viste-controller/146582/4 "2008-08-23T11:57:43Z")

</div>

Ti ringrazio tantissimo per la velocitÃ di risposta e la completezza,  
ora provo ad usare la soluzione da te proposta e a documentarmi meglio.  
Grazie ancora 🙂

---

<div class="post-metadata">

**Author:** ![cereal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/7feea3/32.png) [@cereal](https://www.ruby-forum.com/u/cereal)\
**Post date:** [August 23, 2008, 11:39am UTC](https://www.ruby-forum.com/t/problemi-viste-controller/146582/5 "2008-08-23T11:39:52Z")

</div>

> end
> 
> Scusatemi se le mie domande sono un po “sempliciotte” ma sono un niubbo  
> e non riesco ancora a muovermi bene in rails.

Non ci sono domande banali, quindi vai tranquillissimo.

Provo a spiegarti la storia un attimo. Quando utilizzi il comando  
map.resources all’interno di routes ti crea di default una serie di  
named  
routes per ogni controller, in modo da poter gestire la tua applicazione  
in  
modo RESTful.

Prendendo in considerazione map.resources :users devi sapere che tra  
tutte  
ti crea (in automatico) la named route per accedere all’azione show così  
definita:

map.device “/users/:id”, :action =\> “show”, :conditions =\> { :method =\>  
:get  
}

Ora tutte le chiamate che tu fai e che matchano questo pattern ti  
porteranno  
sempre all’azione show del controller users. Nel tuo caso chiamando  
l’azione  
eventi generi il link /users/event che matcha con la named route per  
accedere a show. Infatti prende users come controller ed event come id  
(lo  
vedi anche dal messaggio di errore)

La soluzione è usare l’opzione member su map.resources dicendogli che hai  
un  
nuovo metodo. Quindi modifica map.resources :users come segue (non l’ho  
testato).

map.resources :users, :member =\> {:event =\> :get}

Questo potrebbe suonarti un pochino complesso, lo so, perchè devi gestire  
ogni metodo extra, ma ti forza a seguire the rails way. In poche parole  
non  
dovresti mai aver bisogno di nuovi metodi (se non raramente) oltre ai 7  
standard. Se ci sono ti consigliano di creare un nuovo controller. Non  
vale  
sempre, ma molte volte  
è così.  
Se ti interessa approfondire cerca “Restful routes customizations” o  
leggi  
il capitolo 4 del librone “The Rails Way” che spiega abbastanza bene  
come  
funziona il routing per RESTful Rails. Ci sono diversi aspetti che  
è meglio  
conoscere.

Buon lavoro!

---

<div class="post-metadata">

**Author:** ![cereal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/7feea3/32.png) [@cereal](https://www.ruby-forum.com/u/cereal)\
**Post date:** [August 23, 2008, 1:32pm UTC](https://www.ruby-forum.com/t/problemi-viste-controller/146582/6 "2008-08-23T13:32:39Z")

</div>

Alla fine ho deciso di creare un controller account, risolvendo cosÃ¬ il  
mio problema e tra l’altro logicamente ha anche piÃ¹ senso. Ciao a tutti  
e grazie ancora dell’aiuto
