rescue true

4 marzo, 2011

Escribir en el layout desde una vista: content_for

Archivado en: Ruby on Rails — xurdekio @ 12:51 pm
Tags: , , ,

En algunas ocasiones puntuales, por requerimientos de funcionalidad o de diseño, necesitaremos poder escribir desde una vista o un helper en algún lugar del layout que lo pinta (o desde un partial en la vista, etc…), esto podemos hacerlo en rails gracias al método content_for

Una de las maravillas de Rails es que las vistas se procesan al revés de como lo intuimos, se empieza por lo más pequeño hasta llegar al layout. Así es que primero se interpretan los partials, despues las vistas y por último el layout. Esto es lo que nos permite poder escribir desde la vista en el layout.

Vamos a ponernos en el caso de un layout con dos columnas (col_left, col_right), en el cual col_right no siempre va a tener contenido puesto que dependerá de la vista en la que estemos. En col_left tendremo la ya conocida instrucción yield, para pintar dentro la vista, y en col_right usaremos content_for con la etiqueta :col_right.

<body>
 <div class="col_left">
   <%=yield%>
 </div>
 <div class="col_right">
  <%=content_for :col_right%>
 </div>
</body>

Ahora, desde nuestra vista, necesitamos escribir el código que queremos que aparezca dentro de la columna derecha, para ello volvemos a recurrir a content_for, pero esta vez con un bloque que sera lo que se pinte en col_right.

<p>Esto se pinta en col_left</p>
<%content_for :col_right do%>
 <p>Sin embargo esto se pinta dentro de col_right</p>
<%end%>

Cómo nota extra vamos a suponer que no somos muy buenos con las css y queremos que nuestra col_left crezca cuando no existe contenido para col_right. Para ello no queremos que se pinte ese div y además le añadiremos un class al body usando el helper content_for?

<body <%= 'class="no-col-right"' unless content_for? :col_right %>>
 <div class="col_left">
   <%=yield%>
 </div>
<%if content_for? :col_right%>
 <div class="col_right">
  <%=content_for :col_right%>
 </div>
<%end%>
</body>

Podemos usar content_for tambien dentro de un helper, y por supuesto podemos usar tantas etiquetas y tantos content_for como queramos a lo largo de nuestros layouts y vistas.

21 noviembre, 2010

Ruby: Diferencias entre “and” y “&&”, “or” y “||”

Archivado en: Ruby,Tips&Tricks — xurdekio @ 12:43 pm
Tags: , ,

Hace unos días me preguntaban por la diferencia en ruby sobre los operadores en sus diferentes formas, esto es and Vs. && y or Vs. ||.
Mucha gente piensa que uno de los dos no sigue los atajos de los circuitos lógicos, sin embargo esto es falso. Las dos formas son igual de eficientes a la hora de evaluarse, es decir, en caso de and y && si la primera condición es falsa no se evalua la segunda, y en caso de or y || si la primera condición es verdadera no se evalua la segunda.
Ahora bien, la diferencia se encuentra en la preferencia de los operadores a la hora de evaluarse. && y || tienen mas preferencia que and y or. Para verlo claramente:

 a = false or true #=> true
 a #=> false

 a = false || true #=> true
 a #=> true

En el primer caso se evalua antes el operador =, con lo que a la variable a se le asigna el valor false. Sin embargo el resultado de la operación es true.
En el segundo caso se evalua primero el operador ||. La expresion devuelve true y a la variable a se le asigna el valor true.

Espero que haya quedado claro, para cualquier cosa.. los comentarios!

9 septiembre, 2010

Curiosidades de Ruby y de Rails

Archivado en: Ruby on Rails,Tips&Tricks — xurdekio @ 3:47 pm
Tags: , ,

Algunas notas curiosas sobre Ruby y Rails

  • El id de false es 0 y su clase FalseClass
  • El id de true es 2 y su clase TrueClass
  • El id de nil es 4 (especialmente util cuando algo referencia constantemente al id 4 y no sabemos porqué)
  • 1/0 es una excepción, pero 1/0.0 o 1.0/0 son Infinity
  • 0/0 es una excepcion, pero 0/0.0 y 0.0/0 son NaN
  • Infinity y NaN son de tipo float
  • Cualquier operacion con NaN es NaN
  • Cualquier cosa dividido entre Infinity es 0
  • Cualquier cosa menos Inifity es -Inifinity

Otro dia pongo alguna más… pero estas son cuando menos, interesantes.

Tema Rubric. Blog de WordPress.com.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.