У меня есть модель 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 на «/".
Я создал слагов в граблях:
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'