Skip to content

Instantly share code, notes, and snippets.

@valachi
Created April 1, 2013 14:59
Show Gist options
  • Save valachi/5285409 to your computer and use it in GitHub Desktop.
Save valachi/5285409 to your computer and use it in GitHub Desktop.
#coding: UTF-8
class Article < ActiveRecord::Base
include LikesCounter
include Article::Associations
mount_uploader :thumb, ThumbUploader
attr_accessor :gallery_select
scope :moderated, where(moderated: true)
scope :waiting_for_moderation, where(moderated: false)
scope :from_superadmins, Article.joins(:user).where('users.superadmin = true')
scope :from_users, Article.joins(:user).where('users.superadmin = false')
# scope :published, where(status: 'publish')
scope :published, where(published: true)
scope :not_published, where(published: false)
scope :excluding_ids, lambda { |ids| where(['articles.id NOT IN (?)', ids]) }
scope :excluding_categories, lambda { |category_names| joins(:category).where(["categories.name NOT IN (?)", category_names]) }
scope :search, lambda { |search| where("title LIKE ? OR teaser LIKE ? OR content LIKE ?",
"%#{search}%", "%#{search}%", "%#{search}%")}
scope :actual_events, lambda { |limit = 3| joins(:category)
.where("categories.name = ? AND event_date >= ?", 'события', Date.today)
.reorder("event_date DESC").limit(limit) }
default_scope order('created_at desc')
acts_as_taggable
paginates_per 8
# before_save :unmoderate, if: :changed?
validate :title, presence: true
validate :check_thumb_presence
before_save :validate_related_articles, :validate_events_attributes
def to_param
"#{id}-#{slug}"
end
def from_regular_user?
!user.superadmin
end
def from_superadmin?
user.superadmin
end
def gallery_select=(gallery_id)
gallery = Gallery.find_by_id(gallery_id)
self.gallery = gallery
end
def gallery_select
[gallery.name, gallery.id] if gallery
end
def comments_count
Comment.where(article_id: id).count
end
def category?(name)
category && category.name == name
end
def xerox?
category?('спецпроекты') && sub_category.try(:name) == 'xerox'
end
def opora_rossii?
category?('спецпроекты') && sub_category.try(:name) == 'opora-rossii'
end
private
def check_thumb_presence
if new_record? or thumb_changed?
errors.add(:thumb, 'Пожалуйста, выберите картинку для материала') unless thumb.present?
end
end
def validate_related_articles
if related_articles.count > 3
errors.add(:related_articles, 'Должно быть 3 или меньше сопутсвующих статей')
end
end
def validate_events_attributes
event_attributes = [:event_date, :event_cost, :event_address]
if category.name == 'события'
event_attributes.each do |attr|
value = read_attribute attr
errors.add(attr, 'Пожалуйста, заполните поле') if value.blank?
end
end
end
# def unmoderate
# unless self.changes.include?('moderated')
# logger.info '===== Unmoderating. Admin did not changed moderated value ======='
# self.moderated = false
# self.approved_at = nil
# end
# end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment