Home > Database > Mysql Tutorial > 模型层的写作风格以及through

模型层的写作风格以及through

WBOY
Release: 2016-06-07 15:04:19
Original
1362 people have browsed it

# -*- coding: utf-8 -*- class User ActiveRecord::Base ----------------------------- include Activity::UserMethods end --------------------------------------------------------------------------------------------------------- class Activity


# -*- coding: utf-8 -*-
class User

  -----------------------------

  include Activity::UserMethods
end

---------------------------------------------------------------------------------------------------------

class Activity   attr_accessible :title, :content, :start_time, :end_time

  belongs_to :creator, :class_name => 'User', :foreign_key => :creator_id

  validates  :creator, :presence => true
  validates  :title,   :presence => true
  validates  :content, :presence => true

  validates :start_time, :end_time, :presence => true

  validate :validate_start_and_end_time

  def validate_start_and_end_time
    errors.add(:base,'开始时间必须早于结束时间') if self.start_time > self.end_time
  end

  module UserMethods
    def self.included(base)
      base.has_many :activities, :foreign_key => :creator_id
    end
  end


  include ActivityMembership::ActivityMethods

end

---------------------------------------------------------------------------------------------------------

class ActivityMembership   attr_accessible :activity, :user

  belongs_to :user
  belongs_to :activity, :foreign_key => :activity_id

  validates  :user,     :presence => true
  validates  :activity, :presence => true



  module ActivityMethods
    def self.included(base)
      base.send :include, InstanceMethods
      base.has_many :activity_memberships
      base.has_many :members, :through => :activity_memberships, :source => :user
    end

    module InstanceMethods
      def add_member(user)
        self.activity_memberships.create :user => user
      end

      def remove_member(user)
        self.activity_memberships.where(:user_id=>user.id).destroy_all
      end
    end
  end
end

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template