Замените "% 20" на "-" в URL для рельсов - PullRequest
1 голос
/ 19 июля 2011

Я занимаюсь разработкой веб-приложения с использованием рельсов. В эстетических целях мне нужно заменить% 20 ​​на -

До: http://localhost:3000/movies/2006/Apna%20Sapna%20Money%20Money

После: http://localhost:3000/movies/2006/Apna-Sapna-Money-Money

В любом случае, я могу добиться этого в рельсах?

Ответы [ 4 ]

3 голосов
/ 19 июля 2011

Вы должны использовать URI.parse, чтобы разбить его на части, а затем изменить только компонент пути:

require 'uri'
u      = URI.parse(url)
u.path = u.path.gsub('%20', '-')
url    = u.to_s

Просто gsub на весь URL, вероятно, будет работать нормально, но небольшая дополнительная паранойя может избавить вас от путаницы и страданий в будущем. Кроме того, если вы просто заменяете буквальную строку, а не регулярное выражение, вы можете использовать строку в качестве первого аргумента для gsub и избежать некоторых экранирующих проблем:

Шаблон обычно является регулярным выражением; если задано как String, любые метасимволы регулярного выражения, которые он содержит, будут интерпретироваться буквально, например, '\\d' будет соответствовать обратной реакции, за которой следует d вместо цифры.

2 голосов
/ 19 июля 2011

Если ваша строка хранится в переменной url, вы можете использовать

url.gsub(/%20/, "-")

, чтобы вернуть желаемую строку, или

url.gsub!(/%20/, "-")

, чтобы фактически изменить значение url со значением, которое вы хотите.

1 голос
/ 19 июля 2011

https://github.com/FriendlyId/friendly_id

это лучший способ перейти к SEO URL

0 голосов
/ 19 июля 2011

Вы, вероятно, хотите сохранить «Apna-Sapna-Money-Money» в вашей Movies модели в качестве атрибута (я обычно называю это slug s).Затем, чтобы сгенерировать их, вам может понадобиться просто заменить пробелы в названии фильма дефисами.Что-то вроде:

class Movie
  before_create :generate_slug

  private
  def generate_slug
    slug = title.gsub(" ", "-")
  end
end

Тогда в вашем действии контроллера вы можете просто сделать Movie.find_by_slug!(params[:id]) вызов.

В принципе, у пользователей не должно быть никаких причин приходить на URL с%20 в нем ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...