Sha256: c627d103dd7dd42f844e39bdd25858291e5ed942b9b87f830d0d2e8ce2cd53de

Contents?: true

Size: 1.42 KB

Versions: 4

Compression:

Stored size: 1.42 KB

Contents

class Block < ActiveRecord::Base
  translates :title, :content
  scope :in_page, lambda{ |page|
    {
      :joins      => :page_cols,
      :conditions => {:page_cols => {:id => page.page_cols}},
      :select     => "DISTINCT `blocks`.*" # kill duplicates
    }
  }

  validates :title, :presence => true

  has_and_belongs_to_many :page_cols,
    :order => 'position'
  has_and_belongs_to_many :categories,
    :readonly => true,
    :join_table => 'categories_elements',
    :foreign_key => 'element_id',
    :association_foreign_key => 'category_id'

  before_destroy :check_has_no_single_key

  define_index do
    indexes single_key, :sortable => true
  end

  define_translated_index :title, :content

  def clone
    cloned = super
    cloned.translations = translations.clone unless translations.empty?
    %w(page_col_ids category_ids).each do |method|
      cloned.send("#{method}=",self.send(method))
    end
    return cloned
  end

  def pages
    self.page_cols.map(&:page)
  end

  def linked_with?(page)
    self.pages.include?(page)
  end

  def link_with(page)
    page.blocks << self
    page.blocks.reset_positions
  end

  def unlink_with(page)
    page.blocks.delete self
    page.blocks.reset_positions
  end

private

  # if the block contains a single_key, it can not be destroyed
  def check_has_no_single_key
    if !self.single_key.blank?
      errors.add(:the_block, :has_single_key)
      return false
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
forgeos_cms-1.9.4 app/models/block.rb
forgeos_cms-1.9.2 app/models/block.rb
forgeos_cms-1.9.1 app/models/block.rb
forgeos_cms-1.9.0 app/models/block.rb