ruby-on-rails - 不要在块中以这种方式定义常量。在块中定义类时
问题描述
我在 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)
看来这是一个不好的做法,但我不确定如何解决它,有什么想法吗?
解决方案
从文档:
不要在块中定义常量,因为块的范围不会以任何方式隔离或命名常量。
如果您尝试定义该常量一次,请改为在块之外定义它,或者如果在外部范围内定义常量会出现问题,则使用变量或方法。
您可以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
推荐阅读
- c# - 如何在 C# 中保留百分比单元格 NPOI 的数值
- python - 删除连续的重复值python
- jenkins - Jenkins 管道中 .yml 和 .groovy 文件之间的区别
- python - python日志模块跳过一些日志,不写入文件
- amazon-redshift - 我可以继续使用 Aginity Workbench 进行红移吗
- apache-spark - 如何以 JSON 格式转换 debezium 消息,以便可以将其加载到 Redshift
- azure-cosmosdb - Gremlin:CosmosDB Gremlin API 中 otherV 的替代方案
- spring - Spring JMS - IBM MQ MessagePutOptions
- excel - 使用 VBA 对多个工作簿求和,无需手动选择
- javascript - AJAX 请求未调用 python-flask 方法