Передача параметров в качестве переменных пути в ruby ​​на рельсах - PullRequest
2 голосов
/ 16 ноября 2008

Я все еще новичок в ROR, поэтому простите за простоту вопроса ...

Итак, http://www.example.com/controller/:id отображает запись в моей таблице, где: id - это число (1,2,3 и т.

Есть ли способ получить: идентификатор в URL-адресе будет значением поля в отображаемой записи? Так что я могу иметь http://www.example.com/controller/record_field? Я хочу иметь удобную для человека ссылку на конкретные записи в моей таблице. Я уверен, что это должно быть возможно. Могу ли я что-то изменить в маршрутах .rb?

Спасибо за помощь!

Ответы [ 3 ]

4 голосов
/ 16 ноября 2008

Самый простой способ - добавить новый метод поиска в вашу модель (или просто использовать find_by_fieldname, который Rails дает вам под свой контроль). Затем ваш контроллер будет использовать этот метод вместо обычного поиска (params [: id]) для извлечения записи вашей модели.

Смотрите скринкаст Райана Б. на этом здесь . Это довольно легко, и он хороший учитель, поэтому у вас не должно быть проблем.

0 голосов
/ 19 ноября 2008

Решение Джона Смока тоже подойдет. Я склонен предпочесть следующее.

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» в «Triple Bypass». Если это приводит к изменению URL-адресов, это может привести к некоторым последствиям, таким как разрыв пользовательских ссылок на мой веб-сайт. Соответственно, для производственного использования я обычно присваиваю этим моделям неизменный атрибут permalink, который я инициализирую как человеческий смысл ровно один раз . Если объект позже изменяется, ну ладно, URL остается прежним. (Существуют и другие решения - это самое простое.)

0 голосов
/ 16 ноября 2008

Я использую отличный плагин rails с именем friendly_id.

http://github.com/norman/friendly_id/tree/master

Это должно хорошо с вами разобраться. Это также хорошо задокументировано.

Позаботьтесь о полях, которые могут иметь современные греческие символы - возможно, придется обойти это.

...