Освоение FriendlyId с несколькими столбцами в Ruby on Rails

Столбец

или title. Однако существуют сценарии, в которых вам может потребоваться использовать несколько столбцов для создания уникального фрагмента. В этой статье мы рассмотрим различные методы реализации FriendlyId с несколькими столбцами, а также приведем примеры кода.

Метод 1: использование объединенного поля.
Один подход заключается в объединении нескольких столбцов для создания единого поля, которое будет использоваться для создания пула. Допустим, у нас есть модель Productсо столбцами nameи category. Мы можем определить метод в модели следующим образом:

class Product < ApplicationRecord
  extend FriendlyId
  friendly_id :slug_candidates, use: :slugged
  def slug_candidates
    [
      [:name, :category],
      [:name, :category, :id]
    ]
  end
end

В этом примере мы предоставляем массив возможных комбинаций для фрагмента в методе slug_candidates. FriendlyId попытается выполнить каждую комбинацию и использовать первую, которая приведет к созданию уникального фрагмента.

Метод 2: использование пользовательского метода
Другой подход заключается в определении пользовательского метода, который генерирует фрагмент на основе нужных столбцов. Давайте рассмотрим модель Personсо столбцами first_nameи last_name. Мы можем определить такой метод:

class Person < ApplicationRecord
  extend FriendlyId
  friendly_id :generate_slug, use: :slugged
  def generate_slug
    "#{first_name}-#{last_name}".parameterize
  end
end

Здесь мы объединяем имя и фамилию через дефис, а затем используем метод parameterizeдля преобразования строки в формат, удобный для URL.

Метод 3: использование обратного вызова
Вы также можете использовать обратный вызов для создания фрагмента на основе нескольких столбцов. Давайте возьмем пример модели BlogPostсо столбцами titleи published_at. Мы можем определить обратный вызов before_saveследующим образом:

class BlogPost < ApplicationRecord
  extend FriendlyId
  friendly_id :title, use: :slugged
  before_save :generate_slug
  def generate_slug
    self.slug = "#{title.parameterize}-#{published_at.year}"
  end
end

В этом примере метод generate_slugвызывается перед сохранением записи и устанавливает фрагмент на основе названия и года публикации.

В этой статье мы рассмотрели различные методы реализации FriendlyId с несколькими столбцами в Ruby on Rails. Мы узнали об использовании объединенного поля, специального метода и обратного вызова для создания фрагментов на основе нескольких столбцов. В зависимости от ваших конкретных требований вы можете выбрать наиболее подходящий метод для вашего приложения.