Nicolas Bally 9e3dd91a06 FAQ admin
2015-10-21 16:29:25 +02:00

141 lines
2.2 KiB
Ruby

class Faq < ActiveRecord::Base
belongs_to :image_file
has_one :block, :as => :blockable
after_create :after_creation
before_validation do
self.slug = self.title.to_slug
self.tags_cache = self.tags_cache.gsub(/ +/, ' ').gsub(/, /,',').gsub(/ ,/,',').gsub(/,+/, ',')
self.tags_cache = self.tags_cache.to_s.gsub(/ +/, ' ').gsub(/, /,',').gsub(/ ,/,',').gsub(/,+/, ',')
end
def after_creation
@block = Block.new(:block_name => "Contenu")
@block.blockable = self
@block.save
end
def alloweds_types
self.block.allow_types :TitleContent, :TextContent, :ImageContent, :LinkContent, :GalleryContent, :HtmlContent
end
before_save do
#self.tags_cache = nil
tag_list = self.tags_cache.split(',').uniq
tag_names = []
tag_objects_list = []
tag_list.each do |tag_name|
if tag = Tag.create(:name => tag_name.capitalize) and tag.id
self.tags << tag
else
tag = Tag.find_by_slug(tag_name.to_slug)
self.tags << tag if !self.tags.include?(tag)
end
tag_objects_list << tag
tag_names << tag.name
end
self.tags_cache = tag_names.sort.join(",").to_s
tags_to_remove = tags - tag_objects_list
tags_id_to_remove = (tags - tag_objects_list).map {|t| t.id}
self.tag_taggables.where(:tag_id => tags_id_to_remove).each { |t| t.destroy }
end
has_many :tag_taggables, :as => :taggable
has_many :tags, :through => :tag_taggables
def generate_tags_cache
self.tags_cache = self.tags.map{|a| a.name}.join(",").to_s
end
def tag_by_tag_ids(tags_id)
Tag.find(tags_id).each do |tag|
self.tags << tag if !self.tags.include?(tag)
end
self.generate_tags_cache
self.save
end
before_destroy do
self.tags_cache = ""
self.save
end
end