首页 > 解决方案 > Rubocop 线长度太长,如何缩短给定线?

问题描述

Rubocop 告诉我我的线太长了。如何在不破坏代码的情况下修复这样的行上的格式?允许您使用下一行的规则是什么?

  belongs_to :car, -> { includes(:listable).where(listings: {listable_type: Car.to_s}) }, foreign_key: :listable_id

  raise ArgumentError, "Can only initiate inherited Classes of Base, not Base Directly" if self.class == Registration::Base

标签: ruby-on-railsrubyruby-on-rails-5.2rubocop

解决方案


有很多地方在 Ruby 中插入换行符是合法的。例如你的第一个片段:

belongs_to(
  :car,
  -> {
    includes(
      :listable
    )
    .where(
      listings:
        {
          listable_type:
            Car
            .to_s
        }
    )
  },
  foreign_key:
    :listable_id
)

你的第二个片段根本没有意义。一个对象总是知道它自己的类,一个对象永远没有理由检查它自己的类。这不仅仅是代码异味或反模式,这是一个巨大的危险信号,表明该代码的作者不了解面向对象和继承。

第二个片段应该使用Replace Conditional with Polymorphism Refactoring 进行重构。您没有显示足够的代码来查看确切的方式,但我会建议这样的事情:

class Registration::Base
  def initialize
    raise ArgumentError, 'Can only initiate inherited Classes of Base, not Base Directly' 
  end
end

推荐阅读