Para que este trabajo "muy bien" con los ayudantes de URL Rieles usted tiene que anular to_param
en su modelo:
def to_param
permalink
end
Dónde permalink
es generado por tal vez un before_save
before_save :set_permalink
def set_permalink
self.permalink = title.parameterize
end
La razón por la que crea un enlace permanente es porque, eventualmente, tal vez, potencialmente, tendrá un título que no es compatible con las URL. Ahí es donde entra parameterize
.
Ahora, en cuanto a encontrar esas publicaciones basadas en lo que permalink
es, puede ir por la ruta fácil o la ruta difícil.
ruta fácil
Definir to_param
ligeramente diferente:
def to_param
id.to_s + permalink
end
seguir utilizando Forum.find(params[:id])
donde params[:id]
sería algo como 1-my-awesome-forum
. ¿Por qué esto todavía funciona? Bueno, Rails llamará al to_i
en el argumento pasado al find
, y llamando al to_i
en esa cadena devolverá simplemente 1
.
ruta duro
Dejar to_param
la misma.Recurrir al uso de find_by_permalink
en sus controladores, utilizando params[:id]
que se transmite en forma de las rutas:
Model.find_by_permalink(params[:id])
Ahora viene la parte divertida
Ahora usted quiere tomar el recurso de la URL. Bueno, es un enfoque Sisípico. Claro que podría dejar de usar los ayudantes de enrutamiento Ruby on Rails ofrece como map.resources
y definirlos usando map.connect
pero ¿realmente vale la pena esa ganancia? ¿Qué "súper poderes especiales" te otorga? Ninguno, me temo
Pero aún si se quería hacer eso, aquí hay un gran lugar para comenzar a partir de:
get ':forum_id/:board_id/:topic_id', :to => "topics#show", :as => "forum_board_topic"
enrutamiento de recursos, enrutamiento anidada, y el enrutamiento de poca profundidad todos van a tener el nombre del recurso en el camino, por lo si solo desea ids o algún nombre de foro en la ruta, deberá realizar un enrutamiento regular, probablemente con parámetros acotados. – Corey