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.