Utilizar slash (/) en los permalinks

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

end

On 11/9/06, Emili Parreño [email protected] wrote:

(archivo lib/permalink.rb)
class String
end

end


Posted via http://www.ruby-forum.com/.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

La respuesta quizá no esté relacionada con RoR, pero no sería más
lógico crear el enlace permanente a partir de datos ya existentes en
la base de datos… Por lo que veo, el añadir /nombre_de_articulo es
irrelevante, ya que buscará el registro dada una ID. Crea el enlace
como quieras (directamente en la vista, por ejemplo) y muestra el
artículo que devuelva el find() pasándole la ID como parámetro.

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

@article = Article.find_by_permalink(params[:id])
render :action => ‘article’

Si le paso el id como parametro, la url será del tipo
www.dominio.com/index/article/34, y precisamente es lo que quiero
evitar, mi intención es hacer una url del tipo
www.dominio.com/index/article/34/calcetines

De hecho ya funciona bien, pero cuando entro al articulo la url que
muestra es
www.dominio.com/index/article/34%2Fcalcetines

La respuesta quizá no esté relacionada con RoR, pero no sería más
lógico crear el enlace permanente a partir de datos ya existentes en
la base de datos… Por lo que veo, el añadir /nombre_de_articulo es
irrelevante, ya que buscará el registro dada una ID. Crea el enlace
como quieras (directamente en la vista, por ejemplo) y muestra el
artículo que devuelva el find() pasándole la ID como parámetro.

Buenas,

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?

Siento no poder ayudarte con lo otro :expressionless:

On 11/9/06, Emili Parreño [email protected] wrote:

Si le paso el id como parametro, la url será del tipo

irrelevante, ya que buscará el registro dada una ID. Crea el enlace


Juan Delgado - Zárate
http://zarate.tv
http://dandolachapa.com

Aqui hay un post que escribi hace tiempo ya

http://www.notsostupid.com/blog/2006/07/07/urls-on-rails/

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

Aqui hay un post que escribi hace tiempo ya

http://www.notsostupid.com/blog/2006/07/07/urls-on-rails/

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.

| Privacy Policy | Terms of Service | Remote Ruby Jobs