Created
          April 1, 2013 14:59 
        
      - 
      
- 
        Save valachi/5285409 to your computer and use it in GitHub Desktop. 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | #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