h1. Migracion Rails4
h2. Correciones generales de Rails
-
config.whiny_nils option is deprecated and no longer works (environments)
-
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly
-
DEPRECATION WARNING: You didn't set config.secret_key_base
-
Las rutas con match deben especificar siempre el método usado mediante via: http://guides.rubyonrails.org/routing.html#http-verb-constraints
h2. Correcciones de ActiveRecord
- El registro de sesiones en BBDD desaparece de activerecord y es necesario habilitarlo como gema:
gem 'activerecord-session_store'
- En ocasiones usabamos expresiones tipo:
condiciones_tareas = ["estado_tarea.activo IS TRUE AND proyecto_id IN (?) AND usuario_asignado_id = ?",@usuario_identificado.proyecto, @usuario_identificado.id]
estas expresiones devuelven un error puesto que ya no se convierte el array de proyectos en array de ids de proyectos. La expresión correcta ahora implica usar pluck:
condiciones_tareas = ["estado_tarea.activo IS TRUE AND proyecto_id IN (?) AND usuario_asignado_id = ?", @usuario_identificado.proyecto.pluck(:id), @usuario_identificado.id]
- DEPRECATION WARNING: Relation#all is deprecated. Este error surge en expresiones como
agentes = [[_("Todos"), "todos"]] + Agente.all(:order => "nombre", :conditions => {:financiador => true }).collect{|p| ...
y hay que reescribirlo como:
agentes = [[_("Todos"), "todos"]] + Agente.where(financiador: true).order(:nombre).collect{|p| ...
-
DEPRECATION WARNING: The following options in your Usuario.has_many :libro declaration are deprecated: :uniq. Please use a scope block instead.
-
el método all no admite parámetros por lo que hay que sustituirlos por las combinaciones joins, where, order, ...
-
desaparecen los métodos find_or_create_by_"atributo" y su nueva sintaxis es find_or_create_by(atributo1: valor1, atributo2: valor2, ...): https://apidock.com/rails/v4.2.7/ActiveRecord/Relation/find_or_create_by
-
no es válido el método sort para ordenar consultas de activerecord y hay que usar order:
NoMethodError (undefined method `sort!' for #)
- ActiveRecord::Relation desde Rails 4.1 ya no es un array y carece de métodos reject!, map!, ... . Hay que convertirlo a array (.to_a) para aplicarlos: http://guides.rubyonrails.org/4_1_release_notes.html#active-record-removals
h2. Correcciones en helpers, vistas y gemas gráficas:
- La gema ajax-chosen-rails tiene dependencias que impiden rails >= 4 . Se carga chosen-rails de tsechingho
gem 'chosen-rails', git: 'https://github.com/tsechingho/chosen-rails.git'
-
OJO: Deshabilitamos calendar-date-select. PENDIENTE: Los helpers hay que adaptarlos para usar el input type="date"
-
OJO: Deshabilitamos la gema de recaptcha. PENDIENTE: Verificar una gema que la sustituya y el codigo comentado en la vista de login de usuario
-
Los helpers de construcción de formularios (selector, texto, ...) no funcionan. Internamente utilizan helpers de rails (selec_tag, text_field, ...) y por como los estamos usando, estos no crean correctamente los atributos "name", con lo que los formularios se envian sin valores.