Aggiunta azione e ActiveRecord::RecordNotFound

ciao ragazzi.
ho un controller + model chiamato ‘categories’.
oltre alle solite azioni (new, index, show…) volevo creare l’azione
‘list’.

  1. vado nel categories_controller.rb ed aggiungo

def list
@categories = Category.all
end

  1. creo la vista app/views/categories/list.html.erb

e quando vado su http:// ip /categories/list il seguente errore mi
compare:

ActiveRecord::RecordNotFound in CategoriesController#show
Couldn’t find Category with ID=list

ps: lo stesso errore mi compare con /categories/index e non con
/categories/ (??? al quale corrisponde comunque la view index)

allora io dico, mannaggia a rails, che ho fatto di male?? su rails 2 una
cosa così mai capitata!! l’applicazione è in rails3

siccome penso sia un problema di routes.rb, vi scrivo il suo contenuto:

BlogX::Application.routes.draw do

resources :news

get “sito/index”

get “sessions/create”

get “sessions/destroy”

match ‘login’ => ‘sessions#new’, :as => :new
match ‘logout’=> ‘sessions#destroy’, :as => :destroy

resources :sessions

resources :sito

resources :activities

resources :categories
end

che devo fare? qualche suggerimento?

grazie a tutti! belli e brutti e a chi fa i rutti XD

Credo che manchi la routes.

resources :categories do
get ‘list’
end

ema

2011/1/19 Dino D. [email protected]:

escludendo il fatto che potresti usare la action index per listare tutte
le
Categories, come ha fatto presente Emanuele, manca la rotta per quella
action:

resources :categories do
get ‘list’, :on => :collection # stabiliamo una GET per l’azione
‘list’ che
si rivolge ad una collezione di items. se fosse un singolo item,
necessiterebbe
di un id
end

in caso volessi leggere qualcosa in pi sulle routes:

ciao,
A.

Il 19/01/2011 08:40, Emanuele DelBono ha scritto:

ciao ragazzi.
2. creo la vista app/views/categories/list.html.erb
allora io dico, mannaggia a rails, che ho fatto di male?? su rails 2 una
get “sessions/create”
resources :activities


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


http://twitter.com/apeacox

in rails 2, se non ricordo male
con queste due righe in routes.rb
map.connect ‘:controller/:action/:id’
map.connect ‘:controller/:action/:id.:format’
dovrebbero risolvere le dipendenze.
L’unico dubbio è che “list” possa essere una parola riservata.
Prova, per curiosità a chiamarla “pippo”

Ciao Michele.

senza nulla togliere ad emanuele, la soluzione che mi ha risolto il
problema è quella di andrea, che ha specificato meglio.
comunque grazie a tutti.

ma toglietemi una curiosità, devo fare sto ambaradam ogni volta che
aggiungo un’action? io non ho ricordi di averlo mai fatto con rails 2,
mi spiegate sta cosa?

grazie

Maurizio De magnis wrote in post #977347:

Tutti i metodi extra del
controller in genere dovrebbero portarti a riflettere sulla loro
effettiva necessita’.

Direi ottima soluzione.

Il 19 gennaio 2011 13:38, Dino D. [email protected] ha scritto:
[cut]

ma toglietemi una curiosit, devo fare sto ambaradam ogni volta che
aggiungo un’action? io non ho ricordi di averlo mai fatto con rails 2,
mi spiegate sta cosa?

In rails 2 era presente, in routes.rb, la regola di routing di default
(come ha scritto Michele nell’ultimo reply):

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

Per ottenere lo stesso effetto in rails 3 puoi usare la nuova sintassi
(gia’ presente nella forma commentata):

match ‘:controller(/:action(/:id))’

fonte: Rails Routing from the Outside In — Ruby on Rails Guides

Diciamo che “l’ambaradan” e’ imho “consigliato” poiche’ in molti casi
ti capita di gestire solo risorse restful e quindi le regole di
routing generate da

resources :categories

bastano a mappare le azioni del controller. Tutti i metodi extra del
controller in genere dovrebbero portarti a riflettere sulla loro
effettiva necessita’. Detto questo, risulta comodo tenere traccia di
queste aggiunte in modo piu’ esplicito (come ha detto Andrea):

resources :categories do
get ‘list’, :on => :collection
end

In sintesi: meno “Magia” nascosta in favore di una maggiore
espressivita’.

Maurizio