lib/ecrire/app/models/post.rb in ecrire-0.22.1 vs lib/ecrire/app/models/post.rb in ecrire-0.23.0

- old
+ new

@@ -1,9 +1,10 @@ require 'nokogiri' class Post < ActiveRecord::Base has_one :header, class_name: Image + has_many :titles, -> { order "titles.created_at DESC" } store_accessor :properties, :labels scope :status, lambda {|status| if status.eql?("published") @@ -13,18 +14,36 @@ end } scope :published, lambda { status("published") } scope :drafted, lambda { status("drafted") } - scope :slug, lambda { |slug| where("posts.slug is ?", slug) } scope :without, lambda { |post| where("posts.id != ?", post.id) } - validates :title, presence: true, uniqueness: true - validates :slug, presence: true, uniqueness: true + validates :titles, length: {minimum: 1} - before_validation :create_slug_if_nil + before_save :update_tags + attr_writer :tags + + def title=(new_title) + if self.published? + self.titles.new(name: new_title) + else + title = self.titles.first || self.titles.new + title.post = self + title.name = new_title + end + end + + def title + (self.titles.first || self.titles.new).name + end + + def slug + self.titles.first.slug + end + def status=(new_status) if new_status.eql? "publish" publish! end end @@ -57,34 +76,23 @@ def excerpt (self.compiled_excerpt || "").html_safe end - - def title=(new_title) - super - if self.draft? - self.slug = nil - end - end - def header? !self.header.nil? && !self.header.url.blank? end - def labels - ids = super || '' - Label.where(id: ids.split(',')).to_a + def tags + @tags ||= Tag.where("tags.id in (?)", super || []) end - def labels=(labels) - super(labels.map(&:id).join(',')) - end - protected - def create_slug_if_nil - return unless self.slug.blank? - self.slug = self.title.parameterize + def update_tags + ids = tags.map(&:id) + unless ids == read_attribute(:tags) + write_attribute(:tags, ids) + end end end