Читаемые URL'ы в рельсовом приложении (friendly_id)
Для того, чтобы использовать красивые урлы вместо id в рельсовом приложении, необходимо установить два гема:
gem 'friendly_id'
gem 'babosa'
Гем babosa нужен для транслитерации. Например у страницы с названием “Мама мыла раму” урл будет выглядеть как “mama-myla-ramu”.
Затем создаем миграцию, в которой добавляем колонку slug
в модель (в нашем случае Post
):
rails g migration add_slug_to_posts
class AddSlugToPosts < ActiveRecord::Migration[5.0]
def change
add_column :posts, :slug, :string
add_index :posts, :slug
end
end
В файл models/post.rb
добавляем следующее:
extend FriendlyId
friendly_id :title, use: :slugged
def normalize_friendly_id(input)
input.to_s.to_slug.normalize(transliterations: :russian).to_s
end
В качестве основы для slug’а берется колонка title
. Если в title
содержатся русские буквы, то произойдет транслитерация.
Затем редактируем контроллер controllers/posts_controller.rb
:
private
def post_params
params.require(:post).permit(:title, :text, :tag_list, :created_at, :slug)
end
def find_post
@post = Post.friendly.find(params[:id])
end
Комментарии