Передача параметров в качестве переменных пути в ruby ​​на рельсах

StackOverflow https://stackoverflow.com/questions/293409

Вопрос

Я все еще новичок в 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 остается прежним. (Есть и другие решения - это самое простое.)

scroll top