URL bonita en Rails al enlazar

Digamos que tengo una aplicación de blogs Ruby on Rails con un modelo Post. Por defecto, podrías leer las publicaciones de http://.../post/id . He añadido una ruta

 map.connect ':title', :controller => 'posts', :action => 'show' 

que aceptará http://.../title (los títulos son únicos) y el controlador hará una consulta para el título y mostrará la página. Sin embargo, cuando ahora estoy llamando a en una vista, Rails aún me da enlaces del tipo post / id.

¿Es posible hacer que Rails cree automáticamente los enlaces bonitos para mí en este caso?

Si está dispuesto a aceptar: http: /…/ 1234-title-text puede simplemente hacer:

 def to_param [id, title.parameterize].join("-") end 

AR::Base.find ignora el bit después del ID, por lo que “simplemente funciona”.

Para hacer que / title desaparezca, intente nombrar su ruta:

 map.post ':id', :controller => 'posts', :action => 'show', :conditions => {:id => /[0-9]+-.*/ } 

Asegúrese de que esta ruta aparezca después de cualquier map.resources :posts call.

Puede anular el método to_param de ActiveRecord y hacer que devuelva el título. Al hacerlo, no necesita hacer su propia ruta para ello. Solo recuerda a URL codificarlo.

Lo que podría ser una mejor solución es echar un vistazo a lo que The Ruby Toolbox tiene para ofrecer cuando se trata de enlaces permanentes . Creo que usar uno de estos será mejor que arreglarlo tú mismo a través de to_param.

Usaría una columna de la base de datos de permalink, una ruta, y normalmente omito el uso de link_to a favor de tags de anclaje html más rápidas.

Configurando tu ruta como:

 map.connect '/post/:permalink', :controller => 'post', :action => 'show' 

luego en el show de posts_controller:

 link = params[:permalink] @post = Post.find_by_permalink(link) 

Tu enlace sería entonces

 Link 

luego en su método de creación, antes de guardar, para generar el enlace permanente

 @post = Post.new(params[:post]) @post.permalink = @post.subject.parameterize if @post.save #ect 

Hay una gem para que hagas esto perfectamente

https://github.com/rsl/stringex