首页 > 解决方案 > 什么是 active_record 实例方法?

问题描述

我的 Rails 应用程序中有公司模型。其中包括以下字段:

class Company < ApplicationRecord
  include Validatable
  validates :contact_one, :city, :state, :country, :address, presence: true
  validates :email, presence: true, uniqueness: true
  has_many :company_domains
  has_many :domains, through: :company_domains
  has_many :job_posts
  has_many :contacts
  has_many :images, as: :imageable
  belongs_to :industry, optional: true, counter_cache: true
  belongs_to :user, optional: true

  def pending_approval?
    self.status == 'in-review'
  end

  def approved?
    self.status == 'approved'
  end

end

# == Schema Information
#
# Table name: companies
#
#  id                    :integer          not null, primary key
#  address               :string
#  city                  :string
#  company_domains_count :integer
#  company_size          :string
#  contact_one           :string
#  contact_two           :string
#  contacts_count        :integer
#  country               :string
#  cover_image           :string
#  email                 :string
#  facebook_url          :string
#  fax                   :string
#  google_plus_url       :string
#  job_posts_count       :integer
#  latitude              :float
#  linkedin_url          :string
#  logo_image            :string
#  longitude             :float
#  name                  :string
#  state                 :string
#  status                :string
#  twitter_url           :string
#  website               :string
#  year_of_establishment :date
#  youtube_url           :string
#  created_at            :datetime         not null
#  updated_at            :datetime         not null
#  industry_id           :integer
#  user_id               :integer

当我将Company.instance_methods(false)检查到 rails 控制台时,我得到了以下实例方法数组:

[:after_add_for_images?, :after_add_for_images=, :before_remove_for_images, :before_remove_for_images?, :before_remove_for_images=, :after_remove_for_images, :after_remove_for_images?, :after_remove_for_images=, :belongs_to_counter_cache_after_update, :autosave_associated_records_for_industry, :autosave_associated_records_for_user, :autosave_associated_records_for_company_domains, :validate_associated_records_for_company_domains, :before_add_for_company_domains, :before_add_for_company_domains?, :before_add_for_company_domains=, :after_add_for_company_domains, :after_add_for_company_domains?, :after_add_for_company_domains=, :before_remove_for_company_domains, :before_remove_for_company_domains?, :before_remove_for_company_domains=, :after_remove_for_company_domains, :after_remove_for_company_domains?, :after_remove_for_company_domains=, :autosave_associated_records_for_domains, :validate_associated_records_for_domains, :before_add_for_domains, :before_add_for_domains?, :before_add_for_domains=, :after_add_for_domains, :after_add_for_domains?, :after_add_for_domains=, :before_remove_for_domains, :before_remove_for_domains?, :before_remove_for_domains=, :after_remove_for_domains, :after_remove_for_domains?, :after_remove_for_domains=, :autosave_associated_records_for_job_posts, :validate_associated_records_for_job_posts, :before_add_for_job_posts, :before_add_for_job_posts?, :before_add_for_job_posts=, :after_add_for_job_posts, :after_add_for_job_posts?, :after_add_for_job_posts=, :before_remove_for_job_posts, :before_remove_for_job_posts?, :before_remove_for_job_posts=, :after_remove_for_job_posts, :after_remove_for_job_posts?, :after_remove_for_job_posts=, :autosave_associated_records_for_contacts, :validate_associated_records_for_contacts, :before_add_for_contacts, :before_add_for_contacts?, :before_add_for_contacts=, :after_add_for_contacts, :after_add_for_contacts?, :after_add_for_contacts=, :before_remove_for_contacts, :before_remove_for_contacts?, :before_remove_for_contacts=, :after_remove_for_contacts, :after_remove_for_contacts?, :after_remove_for_contacts=, :autosave_associated_records_for_images, :validate_associated_records_for_images, :before_add_for_images, :before_add_for_images?, :before_add_for_images=, :after_add_for_images]

谁能帮我理解这些方法会做什么?

标签: ruby-on-railsruby

解决方案


这些是来自的关联回调

关联回调 普通回调与 Active Record 对象的生命周期挂钩,允许您在各个点使用这些对象。例如,您可以使用 :before_save 回调在保存对象之前使某些事情发生。

关联回调与普通回调类似,但它们是由集合生命周期中的事件触发的。有四个可用的关联回调:

before_add after_add before_remove after_remove

https://github.com/rails/rails/blob/7ed1302cd2c458bb552fcd0ded83403c039de28d/guides/source/association_basics.md#association-callbacks


推荐阅读