rails formularios formulario anidados ruby-on-rails

ruby-on-rails - anidados - formularios en rails



Rastrea babosas en URL, utilizando el atributo Título de la Publicación modelo de registro activo en lugar de ID (3)

Esta no es necesariamente una respuesta directa a su pregunta, pero ¿ha revisado el complemento de Stringex ( http://github.com/rsl/stringex )? Es una excelente forma de autocrear babosas para sus registros.

Puede agregar algo como lo siguiente a su modelo:

class Post < ActiveRecord::Base acts_as_url :title end

y creará automáticamente babosas de tu título y las guardará en la columna slug.

También es muy inteligente sobre la forma en que crea babosas. Por ejemplo, un título de "10% de descuento, hoy solo" se convierte en "10% de descuento solo hoy".

¡Bastante resbaladizo!

He intentado hacer que mis Rails creen URL para mostrar los registros usando su título en lugar de su ID en la URL, como por ejemplo:

/ posts / a-post-about-rockets

Siguiendo un tutorial en línea, hice lo siguiente:

Debido a que el ID ya no está en la URL, tenemos que cambiar el código un poco.

class Post < ActiveRecord::Base before_create :create_slug def to_param slug end def create_slug self.slug = self.title.parameterize end end

Cuando se crea una publicación, la versión amigable de la URL del título se almacena en la base de datos, en la columna slug.

También tenemos que actualizar los hallazgos para encontrar registros usando la columna slug en lugar de usar la ID.

class ProjectsController < ApplicationController def show @project = Project.find_by_slug!(params[:id]) end end

En este punto, parece funcionar, excepto que muestra un registro, porque find_by_slug! no existe todavía.

Soy un neófito extremo, ¿dónde debería estar definiéndolo?


La gema Stringex es genial para generar la babosa en sí, pero no estoy de acuerdo en que guardarla en la base de datos sea una buena idea. Debes recordar que si algo relevante para la babosa cambia necesitas actualizar tu columna slug a. E consistente.

Al final, es información duplicada, sin importar en qué forma. Escribí una publicación exactamente por esta razón.

http://blog.ereslibre.es/?p=343

Espero que la publicación sea de alguna ayuda. Traté de explicar todo allí.


find_by_foo no es algo que necesites definir. ActiveRecord lo tomará por usted, siempre que tenga una columna llamada "foo". Agregar un signo de exclamación como lo hizo provocará una excepción si no se encuentra ningún registro, en lugar de devolver cero sin la excepción si no usa el signo de exclamación.

En cuanto a su problema específico, agregó su slug a Publicaciones, pero está tratando de buscar en Project.