Передача параметров в качестве переменных пути в ruby на рельсах
-
08-07-2019 - |
Вопрос
Я все еще новичок в ROR, так что простите за простоту вопроса ...
Поэтому http://www.example.com/controller/:id запись в моей таблице, где id - это число (1,2,3 и т. д.).
Есть ли способ, которым я могу иметь: идентификатор в URL-адресе будет значением поля в отображаемой записи? Так что у меня может быть http://www.example.com/controller/record_field ? Я хочу иметь удобную ссылку на конкретные записи в моей таблице. Я уверен, что это должно быть возможно. Могу ли я что-то изменить в маршрутах .rb?
Спасибо за помощь!
Решение
Самый простой способ - добавить новый метод find в вашу модель (или просто использовать find_by_fieldname, который Rails дает вам под свой контроль). Тогда ваш контроллер будет использовать этот метод вместо обычного поиска (params [: id]) для извлечения записи вашей модели.
Посмотрите ролик Райана Б. на этом здесь . Это довольно легко, и он хороший учитель, поэтому у вас не должно быть проблем.
Другие советы
Я использую отличный плагин rails с именем friendly_id.
http://github.com/norman/friendly_id/tree/master р>
Это должно хорошо с вами разобраться. Это также хорошо задокументировано.
Позаботьтесь о полях, в которых могут быть современные греческие символы - возможно, придется обойти это.
Решение Джона Смока тоже подойдет. Я склонен предпочесть следующее.
class Hamburger << ActiveRecord::Base
#this normally defaults to id
def to_param
name
end
end
class SomeModelController << ApplicationController
def show
@hamburger = Hamburger.find(params[:id]) #still default code
end
end
#goes in some view
This is the <%= link_to "tastiest hamburger ever", url_for(@hamburger) %>.
В общем, это техника SEO (красивые URL-адреса также удобны для пользователя, и я предлагаю их абсолютно всем, даже если вы не заботитесь о SEO, например, на страницах за логином). У меня есть более подробное обсуждение Rails SEO, которое включает в себя другие подобные советы, здесь а>. р>
Важный совет: во время разработки следует учитывать, что вы собираетесь делать, если param
должен измениться. Например, в моем сценарии с гамбургерами вполне возможно, что я мог бы переименовать «Sinfully Delicious Cheeseburger». на «Тройной обход». Если это приводит к изменению URL-адресов, это может привести к некоторым последствиям, таким как разрыв пользовательских ссылок на мой веб-сайт. Соответственно, для производственного использования я обычно присваиваю этим моделям неизменный атрибут permalink
, который я инициализирую как человеческий смысл ровно один раз . Если объект позже изменяется, ну ладно, URL остается прежним. (Есть и другие решения - это самое простое.)