Как удалить определенные слова из URL, используя friendly_id |Рубин на рельсах - PullRequest
0 голосов
/ 23 июня 2018

Я использую friendly_id для моего приложения rails и заметил, что оно вставлено в слаг, дословно. Мне было интересно, есть ли способ отделить слаг от слов, не относящихся к SEO, таких как «и» и «для». Я попробовал немного REGEX, но я даже не уверен, относится ли оно к friendly_id.

В моей заявке (модель):

def to_slug(param=self.slug)

  # strip the string
  ret = param.strip

  #blow away apostrophes
  ret.gsub! /['`]/, ""

  # @ --> at, and & --> and
  ret.gsub! /\s*@\s*/, " at "
  ret.gsub! /\s*&\s*/, " and "

  # replace all non alphanumeric, periods with dash
  ret.gsub! /\s*[^A-Za-z0-9\.]\s*/, '-'

  # replace underscore with dash
  ret.gsub! /[-_]{2,}/, '-'

  # convert double dashes to single
  ret.gsub! /-+/, "-"

  # strip off leading/trailing dash
  ret.gsub! /\A[-\.]+|[-\.]+\z/, ""

  ret
end

Я определенно не специалист по регулярным выражениям, я бы хотел помочь с этим, спасибо.

P.S. Мой метод to_slug применим даже к friendly_id? Я не могу сказать, выполняет ли гем все эти действия или нет, спасибо!

1 Ответ

0 голосов
/ 23 июня 2018

Вы захотите взглянуть на документацию friendly_id , где она дает вам больше информации о Работа со слагами

Ваша модель может выглядеть примерно так (обновите его в соответствии с вашими требованиями регулярных выражений):

class SampleModel < ActiveRecord::Base
  extend FriendlyId
  friendly_id :custom_friendly_id

  # Insert more logic here
  def custom_friendly_id
    your_column.gsub! /\s*&\s*/, " and "
  end
end

Я сделал это для предыдущего приложения и столкнулся с проблемой маршрутизации для старых данных.Я закончил тем, что добавил :slugged к моей команде friendly_id: friendly_id :custom_friendly_id, use: :slugged.Затем запустил скрипт миграции, чтобы обновить атрибут slug в моей модели, чтобы правильно отобразить страницы.

Надеюсь, это поможет.

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