Errores #5281
Actualizado por Oscar Abad hace 9 meses
h1. Especificación
Cuando se realizar un filtrado por nombre en la vista de Acuerdos, lo hace por el campo ''
h1. Análisis
Relaciones entre acuerdo y acuerdo_datos en el modelo:
<pre><code class="ruby">
has_one :ultimos_datos, -> { order('acuerdo_datos.created_at asc') }, foreign_key: :acuerdo_id, class_name: 'AcuerdoDatos'
has_one :actual_ultimos_datos, -> { where("acuerdo_datos.acuerdo_actual": true).order('acuerdo_datos.created_at asc') }, foreign_key: :acuerdo_id, class_name: 'AcuerdoDatos'
</code></pre>
Las diferentes versiones de un acuerdo aparecen mediante esta acción del controlador AcuerdoController:
<pre><code class="ruby">
def versiones
@acuerdo = Acuerdo.find_by_id params[:id]
versiones = @acuerdo.acuerdo_datos.order('created_at DESC')
# Le quitamos la ultima version
@versiones = versiones.to_ary - [versiones.first]
render(:update) do |page|
page.replace_html params[:update], partial: 'versiones'
end
end
</code></pre>
Función del modelo Acuerdo donde se crea una nueva versión del acuerdo al pasar a un metaestado 'firmado' desde un metaestado 'definicion':
<pre><code class="ruby">
def crear_nueva_version
antigua_version = ultimos_datos
nueva_version = antigua_version.dup
nueva_version.save
antigua_version.update_attribute :acuerdo_actual, false
nueva_version.update_attribute :acuerdo_actual, true
antigua_version.acuerdos_contraparte.each do |contraparte|
nueva = contraparte.dup
nueva.acuerdo_datos_id = nueva_version.id
nueva.save
end
antigua_version.acuerdos_aportacion.each do |aportacion|
nueva = aportacion.dup
nueva.acuerdo_datos_id = nueva_version.id
nueva.save
end
antigua_version.acuerdos_pago.each do |pago|
nuevo = pago.dup
nuevo.acuerdo_datos_id = nueva_version.id
nuevo.save
end
antigua_version.acuerdos_area_actuacion.each do |area_actuacion|
nueva = area_actuacion.dup
nueva.acuerdo_datos_id = nueva_version.id
nueva.save
end
antigua_version.acuerdos_pais.each do |pais|
nuevo = pais.dup
nuevo.acuerdo_datos_id = nueva_version.id
nuevo.save
end
end
</code></pre>