首页 > 解决方案 > 不要在块中以这种方式定义常量。在块中定义类时

问题描述

我在 routes 块中定义一个类来处理 ajax 的东西

#config/routes.rb
Rails.application.routes.draw do
  class OnlyAjaxRequest
     def matches?(request)
       request.xhr?
     end
  end
#rest of the routes
end

但是我在编辑器中收到了这个警告:

Do not define constants this way within a block.Lint/ConstantDefinitionInBlock(RuboCop)

看来这是一个不好的做法,但我不确定如何解决它,有什么想法吗?

标签: ruby-on-railsrubyrubocop

解决方案


文档

不要在块中定义常量,因为块的范围不会以任何方式隔离或命名常量。

如果您尝试定义该常量一次,请改为在块之外定义它,或者如果在外部范围内定义常量会出现问题,则使用变量或方法。

您可以OnlyAjaxRequest在块外定义类来解决问题。

class OnlyAjaxRequest
  def matches?(request)
    request.xhr?
  end
end

Rails.application.routes.draw do
  # ...
end

由于约束非常简单,你甚至不需要创建一个类。您可以将 lambda 传递给constraints选项。

is_ajax_request = ->(request) { request.xhr? }

get '/some_route', to: 'test#action', constraints: is_ajax_request

推荐阅读