Entre fechas y bichos en Rails 2.0
Publicado por Román González 24 Marzo 2008 en Ruby, Rails, Bugs. Etiquetas: bugs, Rails. english • español
Al trabajar sobre las fechas en los Form Helpers de Rails, hemos conseguido un bug bastante peculiar, tiene mucho que ver con el uso de los helpers para crear varios elementos de una misma clase de Objetos; este consiste incialmente en colocar un par de corchetes ([]) alrededor del nombre del objeto que queremos crear, de esta forma podemos enviar multiples objetos de una vez en el request del Navegador.
Por ejemplo, cuando tenemos el siguiente codigo en un archivo rhtml (en Rails 2.0 sería html.erb)
<%# Persona 1 %>
<%= text_field 'persona[]', :nombre %>
<%= date_select 'persona[]', :cumple %>
<%# Persona 2 %>
<%= text_field 'persona[]', :nombre %>
<%= date_select 'persona[]', :cumple %>
<% end %>
Esto dibujaría un HTML de la siguiente forma:
<!-- Persona 1 -->
<input id="persona__nombre" name="persona[][nombre]" size="30" type="text" />
<select id="persona_cumple_1i" name="persona[cumple(1i)]">
...
</select>
<select id="persona_cumple_2i" name="persona[cumple(2i)]">
...
</select>
<select id="persona_cumple_3i" name="persona[cumple(3i)]">
...
</select>
<!-- Persona 2 -->
<input id="persona__nombre" name="persona[][nombre]" size="30" type="text" />
<select id="persona_cumple_1i" name="persona[cumple(1i)]">
...
</select>
<select id="persona_cumple_2i" name="persona[cumple(2i)]">
...
</select>
<select id="persona_cumple_3i" name="persona[cumple(3i)]">
...
</select>
</form>
Si se dan cuenta, pueden ver que los selects generados no poseen los [] en el nombre, de hecho los ignora por completo. Esto trae como consecuencia de que cuando se cree el objeto de Persona vía mass-assignment
Persona.create(params[:persona]) # <= esto crearía varias personas a la vez
end
se genere un error difícil de detectar en el código de nuestro proyecto. Después de "googlear" un poco, me di cuenta que es un bug registrado desde hace 2 versiones, por suerte conseguí un patch que me sirvio perfectamente para solucionar este problema.
Les dejo el link del ticket en caso de que lo necesiten:
http://dev.rubyonrails.org/ticket/10551
Muy buen tip eso de las asignaciones multiples, no lo conocia y ademas bien por tener el link del patch.
saludos.