fedibird-fe/app/models/follow_tag.rb

32 lines
987 B
Ruby

# == Schema Information
#
# Table name: follow_tags
#
# id :bigint(8) not null, primary key
# account_id :bigint(8)
# tag_id :bigint(8)
# created_at :datetime not null
# updated_at :datetime not null
# list_id :bigint(8)
# media_only :boolean default(FALSE), not null
#
class FollowTag < ApplicationRecord
belongs_to :account, inverse_of: :follow_tags, required: true
belongs_to :tag, inverse_of: :follow_tags, required: true
belongs_to :list, optional: true
delegate :name, to: :tag, allow_nil: true
validates_associated :tag, on: :create
validates :name, presence: true, on: :create
validates :account_id, uniqueness: { scope: [:tag_id, :list_id] }
scope :home, -> { where(list_id: nil) }
scope :list, -> { where.not(list_id: nil) }
scope :with_media, ->(status) { where(media_only: false) unless status.with_media? }
def name=(str)
self.tag = Tag.find_or_create_by_names(str.strip)&.first
end
end