我想在 Rails 4 上使用 ApplicationRecord Cop。我已经添加了 'self.abstract_class = true' 。
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
这个文件写成'minimum_target_rails_version 5.0'。
https://github.com/rubocop-hq/rubocop-rails/blob/master/lib/rubocop/cop/rails/application_record.rb
所以我像这样创建了custom_cop。
# frozen_string_literal: true
module CustomCops
# @example
#
# # good
# class Rails5Model < ApplicationRecord
# # ...
# end
#
# # bad
# class Rails4Model < ActiveRecord::Base
# # ...
# end
class MustApplicationRecord < RuboCop::Cop::Cop
MSG = 'Models should subclass `ApplicationRecord`.'
SUPERCLASS = 'ApplicationRecord'
BASE_PATTERN = '(const (const nil? :ActiveRecord) :Base)'
include RuboCop::Cop::EnforceSuperclass
def autocorrect(node)
lambda do |corrector|
corrector.replace(node.source_range, self.class::SUPERCLASS)
end
end
end
end
但是我在运行 rspec 时遇到了错误,就像这样。
Failure/Error:
class MustApplicationRecord < RuboCop::Cop::Cop
MSG = 'Models should subclass `ApplicationRecord`.'
SUPERCLASS = 'ApplicationRecord'
BASE_PATTERN = '(const (const nil? :ActiveRecord) :Base)'
include RuboCop::Cop::EnforceSuperclass
def autocorrect(node)
lambda do |corrector|
corrector.replace(node.source_range, self.class::SUPERCLASS)
NameError:
uninitialized constant CustomCops::RuboCop
你知道如何解决这个错误,或者其他方法(比如覆盖 'minimum_target_rails_version 5.0' 到 'minimum_target_rails_version 4.0' )?
版本
Rails 4.2.8
ruby 2.6.6
rubocop 0.80.1
RSpec 3.9