У меня есть модель School
, и вместо того, чтобы иметь URL-адрес schools/1
, я хотел бы иметь URL-адрес localhost:3000/IL/city/school_name
.
Я подписался на это руководство для создания настраиваемых маршрутов с помощью слагов, но конечным результатом является URL-адрес, который выглядит следующим образом:
http://localhost:3000/schools/IL%2Fcicero%2Fabe-lincoln-elem-school
Я хотел бы сделать две вещи: 1. удалить «школы» с маршрута и 2. заменить %2F на «/».
Я создал слаги в задаче rake следующим образом:
def to_slug(string)
string.parameterize.truncate(80, omission: '')
end
slugs = []
School.find_each do |school|
slug = "#{school.state}/#{to_slug(school.city)}/#{to_slug(school.name)}"
if slugs.include?(slug)
slug = slug + "-2"
p "Same Name"
end
p slug
slugs << slug
school.slug = slug
school.save
end
В моей школьной модели:
def to_param
slug
end
В моих маршрутах.rb:
resources :schools, param: :slug
Наконец, в моем контроллере в действии show:
@school = School.find_by_slug(params[:slug])
Я новичок и далеко за пределами моего набора навыков. Я много читал о маршрутах, и кажется, что мне нужно что-то вроде этого в маршрутах:
get ':state/:city/:slug', to: 'schools#show'
Я пробовал это безрезультатно:
resources schools, except: show, param :slug
get ':state/:city/:slug', to: 'schools#show'
School#slug
и пометить его как html безопасныйsuper.html_safe
, однако, если ваш слаг содержит пользовательский контент, вы можете не захотеть этого делать. - person 3limin4t0r   schedule 03.09.2018