В дополнение к ответу Джонни.
Перезапись метода to_param
приведет к появлению заголовка при вызове помощников ресурса, например article_path(@article)
, и он будет передан в качестве params[:id]
контроллеру.
После этого вам нужно будет найти статью более или менее вручную, то есть вместо того, чтобы делать
Article.find(params[:id])
Вам нужно будет сделать
Article.find_by_title(params[:id])
Я не помню, создает ли это исключение NotFound
, если запись не найдена как метод find
, сделайте так, в этом случае вам придется вручную проверить, была ли найдена запись, и вызвать исключение самостоятельно. если бы не было, чтобы вызвать страницу 404.
Одна из проблем, возникающих при этом, состоит в том, что заголовок может состоять из символов, которые не разрешены или не рекомендуются в URL-адресе, поэтому лучшим подходом было бы сохранить слаг в зависимости от заголовка в базе данных и найти его таким образом.
(Вы можете создать слаг автоматически при наличии фильтра в модели и создать его title.parameterize
)
Конечно, проще всего было бы использовать один из множества гемов и плагинов, который уже позаботился об этих вещах.