Apuntes Rails

Apuntes de Ruby on Rails, programación en GNU/Linux y Mac

Adjuntar archivos con Rails

TAGS: None

Interesante artículo para adjuntar archivos con Rails

http://jimneath.org/2008/05/15/swfupload-paperclip-and-ruby-on-rails/

Relaciones Muchos a muchos con tablas “no railianas”

TAGS: None

Si tenemos que usar BD ya existentes y no podemos adaptarlas a Rails… tendremos que adaptar rails a la BD.

Tenemos las siguientes relaciones en la BD

Equipos Equiposprotocolos Protocolos
pkequipos pkequiposprotocolos pkprotocolos
fkequipos
fkprotocolos

Ahora vamos a crear los modelos para relacionar esta tablas con la siguiente advertencia:

IMPORTANTE: El nombre del modelo de la tabla intermedia DEBE DE SER SINGULAR!!!!

Vamos a ver como quedaría

equipos.rb

  1. class Equipos < ActiveRecord::Base
  2.    set_table_name  "equipos"
  3.    set_primary_key "pkequipos"
  4.  
  5.     has_many :equiposprotocolo , :foreign_key => "fkequipos"
  6.     has_many :protocolos, :foreign_key => "fkprotocolos", :through => :equiposprotocolo
  7. end

equiposprotocolo.rb

  1. class Equiposprotocolo < ActiveRecord::Base
  2.     #IMPORTANTE!!! Tanto el nombre del archivo como el de la clase tienen que ser en singular para las tablas de unión!!!!
  3.    set_table_name  "equiposprotocolos" # El nombre de la tabla en la base de datos no importa
  4.    set_primary_key "pkequiposprotocolos"
  5.  
  6.    belongs_to :equipos , :foreign_key => "fkequipos"
  7.    belongs_to :protocolos , :foreign_key => "fkprotocolos"
  8. end

protocolos.rb

  1. class Protocolos < ActiveRecord::Base
  2.     set_table_name  "protocolos"
  3.    set_primary_key "pkprotocolos"
  4.  
  5.  has_many :equiposprotocolo , :foreign_key => "fkprotocolos"
  6.  has_many :equipos, :foreign_key => "fkequipos", :through => :equiposprotocolo
  7. end

Con esto podemos hacer por ejemplo

  1. Equipos.find(1).protocolos
  2. Protocolos.find(1).equipos

Espero que os sea de utilidad

Creando un filtro fecha

TAGS: None

Aunque parezca una tontería pero siempre es util tener un partial con un selector de fecha.

Creamos un parcial por ejemplo _date_select.erb

  1. <%
  2. name = "date" if name.nil?
  3. %>
  4.      <%=select_day(1,:prefix=>name)%>/
  5.      <%=select_month(Date.today,
  6. :use_month_names =>  %w( Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre  Diciembre),:prefix=>name)%>/
  7.      <%= select_year(Date.today, :start_year => Communicationsview.first_year, :end_year =>Communicationsview.last_year,:prefix=>name) %>
  8.  

Ahora solo falta llamar desde una vista usando

  1. <%=render :partial=>"/fijos/date_filter" , :locals=>{:name =>"filtro[fecha]"} %>
  2.  

Fácil, verdad?

Creación de ScreenCast en Ubuntu

TAGS: None

He tenido que crear una serie de video-tutoriales para Guadalinfo y tras buscar un poco he encontrado esta herramienta:

RecordMyDesktop

Es muy fácil de usar. Para pasar los vídeos OGV a AVI solo tenemos que hacer:

mencoder mi-video.ogv -ovc xvid -xvidencopts  fixed_quant=5 -o mi-video.avi

Puede que nos falten algunas librerías:

sudo apt-get install mencoder libavformat52

Algunas aplicaciones más para crear ScreenCast son:

WinK: Muy recomendable. Crea en formato flash y podemos hacer la animación interactiva
CamStudio
Screencast-o-Matic: Crea los vídeos desde la propia web

Problemas con Rails 2.2 y MySql

Tags: ,

Recién actualizado Rails a su versión 2.2 me encuentro con el siguiente error:

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.

Intento instalar la gem de mysql pero me suelta:


Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Bien, he dado con este post donde explica que solo tenemos que instalar lo siguiente:

  1. sudo apt-get install libmysqlclient15-dev
  2. sudo gem install mysql

En mi mac me ha pasado lo mismo y e seguido este artículo:

  1. sudo gem install mysql — –with-mysql-config=/usr/local/mysql/bin/mysql_config
  2.  

También me he encontrado con los siguientes problemas con algunas de las aplicaciones anteriores que tenia.

undefined method `cache_template_extensions=' for ActionView::Base:Class

Se soluciona comentando la linea cache_template_extensions = false de config/environments/development.rb

En otra aplicación me soltaba:

uninitialized constant ApplicationController

Se soluciona haciendo

  1. rake rails:update

Y con el plugin filecolumn igual:

Nos vamos al archivo file_column.rb y en la linea 619 ponemos

  1. ActiveSupport::Inflector.underscore(self.name).to_s

Espero que os sea de ayuda

© 2009 Apuntes Rails. All Rights Reserved.

This blog is powered by Wordpress and the Magatheme Wordpress Theme by Mid MO SEO.