2010-01-12 15 views
5

Teniendo en cuenta este código:¿Cómo puedo evitar la interpolación de cadenas de Ruby?

has_many :foos, :finder_sql = <<-SQL 
    select * from foos where bars = #{id} 
SQL 

La parte #{id} se interpola prematuramente.

¿Cómo puedo escapar?

+0

sí porque rubí interpreta como un comentario – streetparade

+0

@streetparade: No es cierto. HereDocs no tiene comentarios ... de hecho, todo su propósito es para que pueda ignorar el formateo. Sin embargo, actúan como cadenas de comillas dobles (por lo que se ejecuta # {code}). El método de mckeed le dice a ruby ​​que trate el HereDoc como una cadena de una sola cita. –

+0

ver también http://railsblaster.wordpress.com/2007/08/27/has_many-finder_sql/ –

Respuesta

12

poner comillas simples alrededor del delimitador:

has_many :foos, :finder_sql = <<-'SQL' 
    select * from foos where bars = #{id} 
SQL 
+1

Descrito aquí - http://www.cs.auckland.ac.nz/references/ruby/doc_bundle/Manual/man -1.4/syntax.html # here_doc – Gareth

Cuestiones relacionadas