estoy comenzando a usar rails2 y me estoy encontrado con el siguiente
problema,
tengo un modelo que se llama Articulo y un controlador que se llama
Admin, y estoy intentando generar un scaffold de Articulo con el
controlador Admin, pero por más que lo intento con “script/generate
scaffold Articulo Admin” me da el siguiente error “wrong number of
arguments (1 for 2)” aunque si no uso el nombre del controlador creará
uno nuevo con el nombre del modelo en plurar, pero esto no es lo que
necesito.
viendo la ayuda del generador scaffold parece que la opción de generar
scaffold especificando el controlador ya no es posible.
¿Que me recomienda hacer para subsanar este problema?
por otro lado, soy un tanto novato en esto del MVC y no se si mis ideas
se ajustan a esta metodologia, la idea es crear un catalogo online, con
los modelos, Articulo y Categoria, luego tener dos interfaces, una para
el visitante/usuario con la posibilidad de acceder a una zona privada
con su registro y otra zona para la administracion del catalogo.
pues mi idea era esa,
Modelos: Articulo y Categoria
Controladores: Admin y Catalogo (catalogo es para los usuarios)
Vistas: las que correspondan a cada caso
uno nuevo con el nombre del modelo en plurar, pero esto no es lo que
los modelos, Articulo y Categoria, luego tener dos interfaces, una para
un saludo y gracias,
Anteriormente, si mal no recuerdo, al hacer un scaffold Rails
consultaba el modelo y generaba el scaffold, de esta manera si
modificabamos o añadiamos un atributo al modelo, teniamos que generar
nuevamente el scaffold.
El Lunes, 25 de Febrero de 2008, Francesc E.
escribió:> Anteriormente, si mal no recuerdo, al hacer un scaffold Rails
consultaba el modelo y generaba el scaffold, de esta manera si
modificabamos o añadiamos un atributo al modelo, teniamos que generar
nuevamente el scaffold.
Pero no entiendo la diferencia. Si ahora añado o modifico el modelo tengo
que
retocar las vistas (como poco) igual que lo hacía antes (o eso o eliminar
todo el scaffold y rehacerlo desde cero).
¿Cuál es ahora la diferencia?
Que te genera la migración a la vez que creas el scaffold, antes la
tenías que hacer a posteriori. No es que sea un gran avance, pero
ahorra algo de tiempo.
Supongo que lo han hecho partiendo de la base de que cuando creas un
scaffold sabes los campos que va a tener tu modelo y así en una sola
línea lo ventilas todo.
El 25/02/2008, a las 23:40, Iñaki Baz C.
escribió:
El Lunes, 25 de Febrero de 2008, Francesc E. escribió:
Anteriormente, si mal no recuerdo, al hacer un scaffold Rails
Hola, lo que puedes hacer es tener un controller para el publico general
/posts y uno en admin/posts
como el modelo el scaffold lo crea en admin/post, para acceder al
modelo
debes hacerlo asi Admin::Post,
entonces puedes acceder a tus modelos desde cualquier lugar
ej
def catalogo @articulo = Admin::Articulo.find(:all)
…
end
yo lo he hecho asi y funciona, ahora si no es la mejor forma o
si me estoy equivocando , por favor corriganme
he seguido tus indicaciones y he lanzado
script/generate scaffold Admin/Articulo nombre:string referencia:string
descripcion:string precio:float nuevo:bool
y como has dicho me ha creado los subdirectorios admin dentro de models,
controllers y demás, y ahà dentro se han creados el controlador, modelo,
etc de Articulo, pero claro, si siguiera este metodo creo q tendria que
crear dos modelos diferentes (con igual contenido) para la parte de
administracion y otro para la parte de los usuarios.
Yo lo que realmente quiero, es tener los modelos Articulo y Categoria, y
mi idea era tener un controlador para gestionarlos como administrador y
tener otro para el uso de los usuarios que se llamarian Admin y Catalogo
respectivamente, con sus vistas.
No se si esta es la mejor forma de hacerlo ya que yo en la metodologia
MVC ando un tanto verde.
Gracias, un saludo.
Ancor
Jean D. wrote:
Si lo que quieres es separar la administración, puedes hacer:
script/generate scaffold admin/articulo
script/generate scaffold admin/categoria
Las vista y controladores te quedan en una carpeta admin
y las URL serán /admin/articulos/new /admin/categorias/new, etc.
uno nuevo con el nombre del modelo en plurar, pero esto no es lo que
los modelos, Articulo y Categoria, luego tener dos interfaces, una para
un saludo y gracias,
Michel, Ancor… estáis confundiendo modelo con controlador.
En este ejemplo, tendrÃamos sólo dos modelos:
Articulo
Categoria
Esos modelos los podemos controlar de diferentes maneras… por ejemplo:
/admin/articulos # administración de artÃculos (generado con scaffold,
tiene index, show, new, create, etc.)
/admin/categorias # administración de categorÃas (idem)
/articulos # parte pública de artÃculos (solo index, show… no tendrá
acciones destructivas)
En particular, esta lÃnea me ha horrorizado especialmente:
@articulo = Admin::Articulo.find(:all)
SerÃa, en todo caso:
@articulos = Articulo.find(:all)
o sea, acostumbraos a usar el plural si estamos hablando de
colecciones… Y
el modelo será Articulo, no Admin::Articulo… estamos hablando siempre
del
mismo modelo.
El Martes, 26 de Febrero de 2008, Emili
Parreño escribió:> Que te genera la migración a la vez que creas el scaffold, antes la
tenías que hacer a posteriori. No es que sea un gran avance, pero
ahorra algo de tiempo.
Supongo que lo han hecho partiendo de la base de que cuando creas un
scaffold sabes los campos que va a tener tu modelo y así en una sola
línea lo ventilas todo.
En el fondo me parece bien. Personalmente me parecía demasiado “jipi” dar
por
hecho que vamos a necesitar en el modelo los mismos campos que en la
tabla, o
sea, facilitaba las cosas, pero era “excesiva” magia.
El Martes, 26 de Febrero de 2008, Miguel M. escribió:
claro, al parecer en rails 2 si generamos un scaffold admin/algo , el
modelo lo deja en carpeta models/admin/
Hombre, yo me imagino que el scaffold es una forma muy rápida de
“hacerlo
todo”, pero que por su propia naturaleza no hace “todo” lo que queremos.
Si necesitamos un modelo compartido por varios controladores, estando
estos en
namespaces diferentes entiendo que es necesario hacerlo por partes (el
modelo, luego cada controlador…).
Creo que la confusión con todo este tema es que el generador de
scaffolds
tiene sus limitaciones, o sus caracterÃsticas según se mire, y sólo
espera
que le pasemos el nombre del modelo y no el del controlador.
No creo que sea buena idea esto de generar un scaffold para Post y otro
para
Admin/Post porque entonces nos creará dos archivos de modelo cuando en
realidad es la misma cosa.
La solución: o bien tener la administración integrada con la parte
pública,
o generar el scaffold para Post en plan normal:
script/generate scaffold Post titulo:string cuerpo:text
finalmente me decidà a crearlo en un solo controlador, ahora mismo estoy
en ello, la base estaba funcionando, pero me metà a moverlo a la carpeta
catalogo siguiendo tus instrucciones y de momento todo funciona “bien”
salvo que los datos introducidos en los formularios se pierden, por
ejemplo intento hacer una modificiación, me dice que se hizo OK pero…
esa modificación no se guarda, cuando intento crear un elemento nuevo me
dice que el campo esta vacio.
finalmente me he decantado por hacerlo por una de las alternativas que
plantea Jaime, todo en el mismo controlador y añadir comprobación de que
el usuario es el administrador para la acciones destructivas. No se si
sera la mejor forma pero me parecio quizas la mas sencilla.
aquà si que me perdà y ya no se ni por donde buscar, en google no he
encontrado nada de interes y cada cosa que intento hacer parece que lo
agraba más.
solo añadir que antes de hacer el translado a catalogo/ todo estaba
funcionando bien.
un saludo y gracias a todos,
Ancor C…
Ancor C. wrote:
Hola,
finalmente me decidà a crearlo en un solo controlador, ahora mismo estoy
en ello, la base estaba funcionando, pero me metà a moverlo a la carpeta
catalogo siguiendo tus instrucciones y de momento todo funciona “bien”
salvo que los datos introducidos en los formularios se pierden, por
ejemplo intento hacer una modificiación, me dice que se hizo OK pero…
esa modificación no se guarda, cuando intento crear un elemento nuevo me
dice que el campo esta vacio.