Ruby on rails 3 避免Rails 3模型中的代码重复

Ruby on rails 3 避免Rails 3模型中的代码重复,ruby-on-rails-3,activerecord,activemodel,Ruby On Rails 3,Activerecord,Activemodel,我正在开发一个Rails 3.1应用程序,其中有许多不同的类似枚举的模型存储在数据库中。在这些模型以及相关的控制器和视图中有许多相同的代码。我已经通过一个共享的父控制器类和Rails 3中的新视图/布局继承解决了控制器和视图的代码重复问题 现在我正试图解决模型中的代码重复问题,我被卡住了。我的一个枚举模型的示例如下: class Format < ActiveRecord::Base has_and_belongs_to_many :videos attr_accessible

我正在开发一个Rails 3.1应用程序,其中有许多不同的类似枚举的模型存储在数据库中。在这些模型以及相关的控制器和视图中有许多相同的代码。我已经通过一个共享的父控制器类和Rails 3中的新视图/布局继承解决了控制器和视图的代码重复问题

现在我正试图解决模型中的代码重复问题,我被卡住了。我的一个枚举模型的示例如下:

class Format < ActiveRecord::Base

  has_and_belongs_to_many :videos

  attr_accessible :name

  validates :name, presence: true, length: { maximum: 20 }

  before_destroy :verify_no_linked_videos

  def verify_no_linked_videos
    unless self.videos.empty?
      self.errors[:base] << "Couldn't delete format with associated videos."
      raise ActiveRecord::RecordInvalid.new self
    end
  end

end
类格式self.errors[:base]我找到了Rails 3模型代码共享的解决方案,所以我想我应该与其他人共享它。事实证明,ActiveModel确实具备我所需要的一切(至少到目前为止)。我使用
ActiveSupport::Concern
ActiveModel::Validations
ActiveModel::MassAssignmentSecurity
创建了一个枚举模块,并将该模块包括在我的每个枚举模型中:

module Enum

  extend ActiveSupport::Concern

  include ActiveModel::Validations
  include ActiveModel::MassAssignmentSecurity

  included do

    attr_accessible :name

    validates :name, presence: true, length: { maximum: 20 }

    before_destroy :verify_no_linked_videos

    private

    def verify_no_linked_videos
      unless self.videos.empty?
        self.errors[:base] << "Couldn't delete object with associated videos."
        raise ActiveRecord::RecordInvalid.new self
      end
    end

  end

end
模块枚举
扩展ActiveSupport::关注点
包括ActiveModel::验证
包括ActiveModel::MassAssignmentSecurity
包括做
可访问属性:名称
验证:名称,状态:true,长度:{最大值:20}
销毁前:确认没有链接的视频
私有的
def验证\u无链接\u视频
除非self.videos.empty?
self.errors[:base]