Aiuto su tutorial

Sto seguendo un tutorial su un libro…

Dopo aver creato il db mi dice di fare:

ruby script/server scaffold Product Admin

nathan:/var/rails/commerce# script/generate scaffold Product Admin
exists app/controllers/
exists app/helpers/
create app/views/admin
exists app/views/layouts/
exists test/functional/
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
identical app/models/product.rb
identical test/unit/product_test.rb
identical test/fixtures/products.yml
create app/views/admin/_form.rhtml
create app/views/admin/list.rhtml
create app/views/admin/show.rhtml
create app/views/admin/new.rhtml
create app/views/admin/edit.rhtml
create app/controllers/admin_controller.rb
create test/functional/admin_controller_test.rb
create app/helpers/admin_helper.rb
create app/views/layouts/admin.rhtml
create public/stylesheets/scaffold.css
nathan:/var/rails/commerce# script/server

poi mi dice che all’url http://localhost:3000/commerce/admin/list avrò una
lista dei prodotti nel db che però sarà vuota visto che non ho inserito
niente.
però il browser mi da un errore:
Routing Error

no route found to match “/commerce/admin/list” with {:method=>:get}

cosa manca?
Grazie a tutti
Bonzo

A occhio direi che lo scaffolding non è “al passo” con RESTful routing. Se
provi con localhost:3000/commerce/admin/ ti funziona?

Puoi provare a fare
def index
render :action => ‘list’
end

def list

Il tuo metodo già definito (o lo scaffold te lo crea al volo? non lo

uso mai e quindi non mi ricordo bene)
end

Nella console trovo spesso utile usare robe tipo
app.new_account_path

per verificare che mi manda effettivamente a /accounts/new

:slight_smile:

A occhio direi che lo scaffolding non è “al passo” con RESTful routing. Se
provi con localhost:3000/commerce/admin/ ti funziona?

Se faccio questo indirizzo l’errore è lo stesso:
Routing Error

no route found to match “/commerce/admin” with {:method=>:get}

Dove lo metto questo codice?

Ma non è che devi cercare la roba sotto la root direttamente… mi sa di
sì! “localhost:3000/admin/list” funziona?

L’errore è lo stesso sia su /admin/list che su /admin

anche sotto /commerce
Routing Error

no route found to match “/commerce/” with {:method=>:get}

Devo postare il codice di qualche pagina?

On Fri, 7 Sep 2007 17:57:23 +0200, Bonzo wrote:

Sto seguendo un tutorial su un libro…
poi mi dice che all’url http://localhost:3000/commerce/admin/list avrò una
lista dei prodotti nel db che però sarà vuota visto che non ho inserito
niente.
però il browser mi da un errore:
Routing Error

no route found to match “/commerce/admin/list” with {:method=>:get}

Ma non è che devi cercare la roba sotto la root direttamente… mi sa di
sì! “localhost:3000/admin/list” funziona?

On Sun, 9 Sep 2007 15:48:40 +0200, Bonzo wrote:

no route found to match “/commerce/” with {:method=>:get}

Devo postare il codice di qualche pagina?

Direi che non serve. Il tuo problema sta a monte; magari c’è anche qualche
problema al codice, ma se non ti va manco la root…

Giusto per essere sicuro di aver capito: http://localhost:3000 ti
dà routing error? Sei sicuro di non aver lanciato un’altro server sulla
porta 3000? Stoppa il server con mongrel_rails stop e fai un ps auxwww |
grep mongrel per accertarti che non sta acceso da un’altra parte anche
(usi mongrel? sennò fa uguale ma con script/server stop e cerca processi
ruby nella processlist).

allora avevi ragione:

http://localhost:3000/admin/list funziona.

Come mai fa
così?
Grazie
bonzo

P.S. Scusa, ma non avevo capito che avevi tolto commerce dal percorso.

:slight_smile:

Il server espone in realtà solo la cartella public dell’app; tutte le
richieste dinamiche (= che non non hanno un file html statico
corrispondente) vengono intercettati dl dispatcher e “inviati” a rails.
Il nome della cartella che ti contiene il tutto (“commerce” nel tuo
caso) non importa e non viene esposto al mondo via http (e va benissimo
così direi). Rails è diverso da PHP in questo senso e più simile (credo) ad
applicazioni web fatte in Java. In PHP tendevo a mettere il codice
dell’app direttamente nella cartella web dell’applicazione e poi
procedevo al contrario e restringevo l’accesso alle cartelle di codice.
Rails fa l’opposto (e ripeto: fa benissimo).

Potrai quindi fare un’applicazione contenuta in una cartella
“eccoti_cliente_stronzone” ed esporrlo al mondo come
www.cliente.com/sito_fighissimo_nato_dalla_tua_geniale_spirito_imprenditoriale

:slight_smile: