:remember_me, :provider, :name, :user_name, :image, :image_cache, :remote_image_url, :profile_attributes, :accept_terms accepts_nested_attributes_for :profile mount_uploader :image, ProfileImageUploader validates :image, file_mime_type: { content_type: /image/ } validates :user_name, uniqueness: true, length: { maximum: 30 }, format: { with: /\A[a-zA-Z0-9_.]+\Z/, message: 'Only letters, numbers, underscore and dots' } validates :name, presence: true, on: :update validates :user_name, presence: true, on: :update validates :accept_terms, acceptance: true, on: :update has_one :profile, dependent: :destroy, class_name: 'UserProfile' has_one :social_network, dependent: :destroy has_many :product_entries, foreign_key: :participant_id has_many :products, foreign_key: :submitter_id has_many :yurns, foreign_key: :yurner_id has_many :bought_orders, foreign_key: :buyer_id, class_name: 'Order' has_many :sold_orders, foreign_key: :merchant_id, class_name: 'Order' has_many :follows, dependent: :destroy has_many :followers, through: :follows, class_name: 'User' def followed_by?(user) followers.include?(user) end def followed_by!(user) if user != self followers << user unless followed_by?(user) end end def not_followed_by?(user) ! followed_by?(user) end def not_followed_by!(user) Follow.destroy_all(follower_id: user, followable_id: self, followable_type: self.send(:class)) end end