Ruby on rails 3 避免Rails 3模型中的代码重复
我正在开发一个Rails 3.1应用程序,其中有许多不同的类似枚举的模型存储在数据库中。在这些模型以及相关的控制器和视图中有许多相同的代码。我已经通过一个共享的父控制器类和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
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]