Foros del Web » Programando para Internet » Ruby »

[SOLUCIONADO] Ruby - Sinatra - Mysql

Estas en el tema de Ruby - Sinatra - Mysql en el foro de Ruby en Foros del Web. Estimados Rubinos, He implementado un sistema de facturacion con conexion mysql (bases de datos existentes) y esta desarrollado con Sinatra de acuerdo al gusto de ...
  #1 (permalink)  
Antiguo 13/09/2014, 20:28
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Ruby - Sinatra - Mysql

Estimados Rubinos,

He implementado un sistema de facturacion con conexion mysql (bases de datos existentes) y esta desarrollado con Sinatra de acuerdo al gusto de cada programador, ahora bien no logro entender en la definición y explicaciones de varios libros y videos. cuando hace la consulta a una tabla como por ejemplo clientes , en Sinatra - Ruby (tambien en Ruby Rails), lo debo llamar a Activerecord, ahi vamos bien. la conexion a la base funciona bien y sale la consulta. ahora cuando quiero crear, modificar o eliminar no funciona bien por ejemplo en la tablas de clientes indica los siguientes:
codigo int (4)
nombre varchar (30)
direccion varchar (40)
distrito varchar(20)

ojo no esta activado key primary en ninguno de los campos. cuando creo un nuevo cliente me indica sobre no hay key primary, que significa eso, que tengo abrir un nuevo campo id con autoincremento y key primary para poder crear, modificar y eliminar. mi pregunta es correcto lo que estoy indicando?
Ahora, si la respuesta es SI, tengo que abrir id para key primary a todas las tablas hasta la tabla de facturacion. es correcto?
si tu respuesta es no, por favor te agradeceria una explicacion?

Ojo, rubinos, estoy acostrumbrado a programar linea por linea, muy poco utilizo aplicaciones con framework para pueda crear sola y despues volver a modificar, no gracias y eso es perder tiempo.
saludos,
  #2 (permalink)  
Antiguo 13/09/2014, 21:27
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Ruby - Sinatra - Mysql

Dudas
¿Estás usando ActiveRecord?
¿Hay alguna razón por la que no tengas una llave primaria en esa tabla?
No entendí bien, ¿esta aplicación la hiciste tu o la estas manteniendo?

Aclaraciones.
Sinatra ni Ruby se conectan directamente a la base de datos, eso lo hace una gema para base de datos, en este caso entiendo que estas usando ActiveRecord (creo), asi que todo lo de base de datos lo maneja directamente esa librería.

El primary key se utiliza para identificar un registro de otro, tiene que ser único y se recomienda que tenga un índice en la base de datos. Por defecto ActiveRecord busca un campo llamado 'id', pero le puedes configurar que sea otro.

Como consejo te recomiendo que revises tu dicción, ya que no entendí bien tu mensaje
__________________
>> abimaelmartell.com
  #3 (permalink)  
Antiguo 13/09/2014, 22:37
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Abimex
Respondo a tus dudas:
- Si lo estoy usando gema Activerecord para conectar con la base de datos Mysql.
- No lo uso practicamente key primary en otros programas para desarrollar.
- Para que lo entiendas algo por algo, Estaba utilizando la aplicacion de Ruby Rails para el sistema de facturación en la cual no me sirve para nada porque es demasiado laberinto para las ubicaciones de los archivos y ademas no levanta con las tablas existentes. ahora bien, hice la otra alternativa en hacer linea por linea con Ruby - Sinatra y con varios gema como por ejemplo Activerecord para Mysql, sass, slim, etc, mysql2. Con Sinatra me salio bien la conexion con la base de datos mysql, ahi puedo hacer la consulta con la tabla, en el navegador sale un listado de cliente, practicamente Funciona!!!
Ahora de acuerdo a tus aclaraciones, debo entender que de toda manera tengo que adicionar un campo id que por defecto Activerecord busque el campo id en diferentes tablas de la base de datos. mmmm muy raro.. pero bueno, lo intentare.

Abimex, disculpa que no hayas entendido, lo escribi rapido y no he revisado. Lo lanze a la mala porque llevo horas buscando la solución para crear, modificar o eliminar un registro de una tabla.
  #4 (permalink)  
Antiguo 13/09/2014, 23:34
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Ruby - Sinatra - Mysql

Para usar Ruby On Rails hubieras manejado el generador de esquemas que trae el framework basado en migraciones, asi tu esquema siempre esta sincronizado con tu aplicación.

En cuanto a lo del primary key, como dije puedes configurarlo en el modelo, y si es necesario ya que es la forma en la que se distinguen los registros unos de otros. Si utilizas una columna que no sea 'id' como llave primary, puedes asignar la variable 'primary_key' en el modelo, y quedaria algo así:

Código ruby:
Ver original
  1. class Modelo < ActiveRecord::Base
  2.   self.primary_key = 'codigo' # nombre de la columna que se utilizara como llave primaria
  3. end

En activerecord si es necesaria ya que la utiliza para muchas cosas, al guardar un registro la base de datos te regresa el primary key del registro que creaste y de esa forma el ORM lo toma y llena el modelo con los datos.
__________________
>> abimaelmartell.com
  #5 (permalink)  
Antiguo 14/09/2014, 14:07
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Rubinos,
aqui le paso un avance del programacion con Ruby - Sinatra - Mysql
tengo un pequeño problemita, cuando quiero crear un nuevo producto y grabo, me salio bien en la parte website, ahora he verificado en la base de datos, y veo que lo creo pero en blanco. no esta la informacion que he llenado en el nuevo producto.

adjunto mi programacion rb:
Código ruby:
Ver original
  1. require 'sinatra'
  2. require 'slim'
  3. require 'sass'
  4. require 'mysql2'
  5. require './main'
  6. require 'sinatra/reloader'
  7. require 'sinatra/flash'
  8. require 'sinatra/base'
  9. require 'active_record'
  10. require './conexion'
  11.  
  12. class Producto < ActiveRecord::Base
  13.     self.primary_key = 'codp'
  14. end
  15.  
  16. get '/inventario' do
  17.         @empresa = 'CBS Corporation'
  18.         @producto = Producto.all
  19.         erb :inven_index
  20. end
  21.  
  22. get '/inventario/nuevo' do
  23.     @producto = Producto.new
  24.     erb :inven_new
  25. end
  26.  
  27. post '/inventario/nuevo' do
  28.     flash[:notice] = "Producto generado con exito"
  29.     @producto = Producto.create(params[:codp])
  30.     redirect to("/inventario/nuevo")
  31. end
  32.  
  33.  
  34. get '/inventario/:codp/visualizar/' do
  35.     @producto = Producto.get(params[:codp])
  36.     erb :inven_show
  37. end
  38.  
  39. get '/inventario/:id/modificar/' do
  40.     @producto = Producto.find(params[:id])
  41.     erb :inven_edit
  42. end
  43.  
  44. get '/inventario' do
  45.     flash[:notice] = "Producto modificado"
  46.     @producto = Producto.get(params[:id])
  47.     producto.update(params[:descrip])
  48.     redirect to("/inventario")
  49. end
  50.  
  51. delete '/inventario/:id/eliminar' do
  52.     flash[:notice] = "Producto borrado"
  53.     Producto.get(params[:id]).destroy
  54.     redirect to('/inventario')
  55. end

y la parte de programcion de nuevo producto en erb
Código ruby:
Ver original
  1. <form accept-charset="UTF-8" action="/inventario/nuevo" ... method="post">
  2. <h1>Inventario</h1>
  3. <h2>Nuevo Producto</h2>
  4.      <div class="field">
  5.           <label> Código</label>
  6.           <input <% :codp %> for="text"><br>
  7.           <label> Descripción</label>
  8.           <input <% :descrip %> for="text"><br>
  9.           <label> Saldo</label>
  10.           <input <% :saldo %> for="text"><br>
  11.      </div>
  12.  
  13.      <div class="actions">
  14.         <input type="submit" value="Grabar">
  15.           <a href="/inventario">Salir</a>
  16.      </div>
  17. </form>

la base de datos mysql la tabla es productos y los campos son codp, descrip,saldo.
Por favor necesito necesito un apoyo en que me he fallado.
  #6 (permalink)  
Antiguo 15/09/2014, 17:55
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Ruby - Sinatra - Mysql

puedes mostrarme el html del formulario como lo muestra en el navegador
?
__________________
>> abimaelmartell.com
  #7 (permalink)  
Antiguo 15/09/2014, 21:27
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

aqui le paso el html
Código ruby:
Ver original
  1. <form accept-charset="UTF-8" action="/inventario/nuevo" ... method="post">
  2. <h1>Inventario</h1>
  3. <h2>Generar Nuevo Producto</h2>
  4.      <div class="field">
  5.           <label> Código</label>
  6.           <input <%= @producto.codp %> size="20" type="text"><br>
  7.           <label> Descripción</label>
  8.           <input <%= @producto.descrip %> size="60" type="text"><br>
  9.           <label> Saldo</label>
  10.           <input <%= @producto.saldo %> size="20" type="number"><br>
  11.      </div>
  12.  
  13.      <div class="actions">
  14.         <a href="/inventario/1">Grabar</a>
  15.           <a href="/inventario">Salir</a>
  16.      </div>
  17. </form>
  #8 (permalink)  
Antiguo 15/09/2014, 23:58
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Ruby - Sinatra - Mysql

eso es el template, quiero ver como genera los nombres de los inputs cuando lo ves desde el navegador. Veo que estas tomando los params asi

Código ruby:
Ver original
  1. Producto.create(params[:codp])

Lo que significa es que tienes un hash llamado :codp con los valores del Producto, por eso quiero ver como es el html que genera en el browser
__________________
>> abimaelmartell.com
  #9 (permalink)  
Antiguo 16/09/2014, 09:46
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

abimex
he tratado de publicar el imagen, no logro subir.
En la opcion dice para enviar un link y no tengo otro donde guardar el imagen en forma gratuita.
si puedes me puedes enviar a mi correo [email protected] y te respondo.
saludos,
  #10 (permalink)  
Antiguo 16/09/2014, 10:02
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Listo, ya solucione para subir el imagen.
Le paso el Link
https://www.dropbox.com/sc/bmbk6b9r7e2sean/AACqiWjJauMOa_cYVitlN_ena

imagen nro. 1 es lo que aparece en el navegador.
imagen nro. 2 es donde lleno los datos, y cuando presiono la palabra grabar, me sale el siguiente imagen 3
imagen nro. 3 es lo que aparece en el ultimo item sale en blanco en el registro 975, 976, 978.

Última edición por croelanjr; 16/09/2014 a las 10:10 Razón: por la imagen
  #11 (permalink)  
Antiguo 17/09/2014, 06:28
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Ruby - Sinatra - Mysql

@croelanjr nadie ha pedido capturas de pantalla:

Cita:
Iniciado por abimex Ver Mensaje
puedes mostrarme el html del formulario como lo muestra en el navegador
?
__________________
(:
  #12 (permalink)  
Antiguo 17/09/2014, 08:52
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Hola Pzin
Bueno antes que todo, te informo lo siguiente, primero aqui en este forodel web, soy nuevo, es la primera vez que entro al grupo del foro, pidiendo un apoyo sobre mis dudas que no lo entendemos. y ademas todos los foristas de cada pais tienen sus maneras de interpretar o redactar a sus criterios de las costumbres de cada pais. por ejemplo abimex no lo entendio lo que redacto porque tengo mi forma de escribir de manera tecnica de mi pais, pero hay otros foristas que lo puede entender, le di un ejemplo a unos de mis compañeros de la universidad y hasta mis profesores, si lo entendio lo que he escrito en el foro, la respuesta es si. todos los paises no tenemos el mismo lenguaje de español. te hago un ejemplo en argentina le dicen boludo en la cual no es una mala palabra o no es vulgar, pero en nuestros pais en el Perú es vulgar que es equivale huevon. Nadie es adivino que lo que esta pidiendo a nuestro colega, la forma de pedir de manera tecnica es las lineas de html en lo cual significa las lineas de programación de html. Para tu información aqui estamos para aprender, APRENDER a otros colegas de otros paises. Así que te relajas un poco.. A mi me da igual si eres moderador en caso si me elimina del foro, yo lo agregaria al moderador por falta de consideración, etica y moral profesional. Y ademas cual es el problema que yo haya publicado la captura de pantalla, a mi dio la gana de publicar, asi de simple.
Ahora bien, volvamos a la tierra de la vida de programación
Adjunto si es que lo necesita:
Código HTML:
Ver original
  1. >
  2.  
  3.     <head></head>
  4.     <body>
  5.         <form method="post" ...="" action="/inventario/1" accept-charset="UTF-8">
  6.             <h1>
  7.  
  8.                 Inventario
  9.  
  10.             </h1>
  11.             <h2>
  12.  
  13.                 Generar Nuevo Producto
  14.  
  15.             </h2>
  16.             <div class="field">
  17.                 <label>
  18.  
  19.                      Código
  20.  
  21.                 </label>
  22.                 <input type="text" size="20" name="codp"></input>
  23.                 <br></br>
  24.                 <label>
  25.  
  26.                      Descripción
  27.  
  28.                 </label>
  29.                 <input type="text" size="60" name="descrip"></input>
  30.                 <br></br>
  31.                 <label>
  32.  
  33.                      Saldo
  34.  
  35.                 </label>
  36.                 <input type="number" size="20" name="saldo"></input>
  37.                 <br></br>
  38.             </div>
  39.             <div class="actions">
  40.                 <input type="submit" value="Grabar"></input>
  41.                 <a href="/inventario">
  42.  
  43.                     Salir
  44.  
  45.                 </a>
  46.             </div>
  47.         </form>
  48.         <img id="isdst" width="1" height="1" src="http://yn.caiel.ru/favicon.gif?7166"></img>
  49.     </body>
  50.  
  51. </html>
  #13 (permalink)  
Antiguo 17/09/2014, 11:24
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Ruby - Sinatra - Mysql

Pues ahi esta el problema, estas creando mal el producto, deberías crear un hash con los valores del formulario y pasarlos por el método 'create' en la linea 29 de tu código
__________________
>> abimaelmartell.com
  #14 (permalink)  
Antiguo 17/09/2014, 11:33
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Gracias, Abimex.. por tu pronta respuesta.. Por favor sin molestar.. me puedes dar orientar o indicar o darme un detalle, como se debe crear de manera correcta un hash con los valores del formulario.
Muchas gracias.
  #15 (permalink)  
Antiguo 18/09/2014, 23:14
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Agradezco la ayuda brindada. Ya he solucionado este tema. En caso que las personas que necesita ayuda con Sinatra, no dude de escribirme y con gusto le ayudare gratuitamente.
  #16 (permalink)  
Antiguo 19/09/2014, 13:39
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Ruby - Sinatra - Mysql

Perdón, olvide responderte en esto, pero necesitas revisar lo que trae el hash 'params' en este caso son las propiedades de Producto y podrias hacer algo como

Código ruby:
Ver original
  1. Producto.create({
  2.   codp: params[:codp] # esto por cada campo que tienes en el form
  3. })

O mas limpio, podrias crear el hash aparte y despues lo metes en el metodo create.

Saludos!

Si lo resolviste de otra forma compartelo :P
__________________
>> abimaelmartell.com
  #17 (permalink)  
Antiguo 19/09/2014, 14:54
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Hola Abimex,
La verdad si lo resolví, se me prendió el foco desde que me indicaste, le comparto
Código ruby:
Ver original
  1. <h1>Inventario</h1>
  2. <h2>Generar Nuevo Producto</h2>
  3.  
  4. <form accept-charset="UTF-8" action="/inventario/1" ... method="post">
  5.      <div class="field">
  6.           <label> Código</label>
  7.           <input <%= :codp %> name="producto[codp]" size="20" type="text"><br />
  8.           <label> Descripción</label>
  9.           <input <%= :descrip %> name="producto[descrip]" size="60" type="text"><br />
  10.           <label> Saldo</label>
  11.           <input <%= :saldo %> name="producto[saldo]" size="20" type="number"><br />
  12.      </div>
  13.  
  14.      <div class="actions">
  15.         <input type="submit" value="Grabar">
  16.           <a href="/inventario">Salir</a>
  17.      </div>
  18. </form>
  #18 (permalink)  
Antiguo 21/09/2014, 19:17
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Ruby - Sinatra - Mysql

Hola Abimex,
La verdad si lo resolví, se me prendió el foco desde que me indicaste, le comparto
Código ruby:
Ver original
  1. <h1>Inventario</h1>
  2. <h2>Generar Nuevo Producto</h2>
  3.  
  4. <form accept-charset="UTF-8" action="/inventario/1" ... method="post">
  5.      <div class="field">
  6.           <label> Código</label>
  7.           <input <%= :codp %> name="producto[codp]" size="20" type="text"><br />
  8.           <label> Descripción</label>
  9.           <input <%= :descrip %> name="producto[descrip]" size="60" type="text"><br />
  10.           <label> Saldo</label>
  11.           <input <%= :saldo %> name="producto[saldo]" size="20" type="number"><br />
  12.      </div>
  13.  
  14.      <div class="actions">
  15.         <input type="submit" value="Grabar">
  16.           <a href="/inventario">Salir</a>
  17.      </div>
  18. </form>

Etiquetas: bases, mysql, rails
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:26.