Hola a todos, estoy realizando una aplicacion en la que hay articulos y
para acceder a ellos utilizo un permalink que guardo en la tabla de
articulos y que genero poniendo el id+/+nombre_del_articulo.
Lo hago asà porque hay nombres de articulos repetidos. El problema es
que el slash (/) lo guarda bien en la tabla, y me permite acceder bien a
los articulos, pero en la url del articulo, en lugar de aparecer
index/articles/34/shoes, aparece index/articles/34%2Fshoes. Alguien sabe
porque?
Os pongo el codigo que genera el permalink por si a alguien le interesa
(archivo lib/permalink.rb)
class ActiveRecord::Base
def self.use_permalink( attr, id )
self.class_eval <<-EOF, FILE, LINE
before_save { |r| r.permalink = r.#{id}.to_s+’/’+r.#{attr}.to_url}
EOF
end
end
class String
def to_url
# paso a minusculas y quito caracteres no validos y espacios
result = self.downcase
result.gsub!(/[’"]/, ‘’)
result.gsub!(/W/, ’ ')
result.gsub!(/ +/, ‘-’)
result.gsub!(/(-)$/, ‘’)
result.gsub!(/^(-)/, ‘’)
# devuelvo el resultado
result
end
nombre_de_articulo el el nombre que tiene cada articulo en la base de
datos.
Los enlaces se crean poniendo :id => @post.permalink, de esta manera se
consigue una mejor indexación en el google, ya que en la url aparece el
nombre del articulo.
El registro no lo busca dada una id, lo busca dado un permalink
Igual me equivoco, pero como dice Xoan, si ya tienes el ID del
artículo en la URL, y el ID es único, ¿por qué necesitas hacer la
búsqueda por el título?
Esta en ingles, pero el codigo fuente deberia ser suficiente para
explicar la solucion al problema:
class Account < ActiveRecord::Base
def to_param
“#{id}-#{full_name.gsub(/[^a-z1-9]+/i, ‘-’)}”
end
end
Rails usa la funcion to_param para construir los URLs cuando pasas un
modelo como parametro :id en url_for. Dependiendo de la base de datos
que utilizes, es posible que necesites un metodo especial para buscar
los objetos, limpiando la parte no numerica del id. Pero en mysql
funciona sin tener que hacer ningun cambio.
Muchas gracias Sebastian, de echo es lo que estaba haciendo ahora, poner
el id y el nombre del artÃculo con un guion en medio, pero no conocÃa
esta manera de hacerlo. Con la solución que tu propones te ahorras tener
que generar un permalink
Esta en ingles, pero el codigo fuente deberia ser suficiente para
explicar la solucion al problema:
class Account < ActiveRecord::Base
def to_param
“#{id}-#{full_name.gsub(/[^a-z1-9]+/i, ‘-’)}”
end
end
Rails usa la funcion to_param para construir los URLs cuando pasas un
modelo como parametro :id en url_for. Dependiendo de la base de datos
que utilizes, es posible que necesites un metodo especial para buscar
los objetos, limpiando la parte no numerica del id. Pero en mysql
funciona sin tener que hacer ningun cambio.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.