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