模型层的写作风格以及through
# -*- 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