如何解决不要在块内以这种方式定义常量在块中定义类时
我在路由块中定义了一个类来处理 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)
这似乎是一个不好的做法,但我不确定如何解决它,有什么想法吗?
解决方法
来自docs:
不要在块内定义常量,因为块的作用域不会以任何方式隔离或命名常量。
如果您尝试定义该常量一次,请改为在块外定义它,或者如果在外部范围内定义常量会出现问题,则使用变量或方法。
您可以在块外定义 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
,
我不明白为什么要在具体情况下在块内定义一个类,因为它可以定义同样好的外部,但是如果您遇到真正想在本地执行此操作的情况,你可以这样做
Object.const_set(
"OnlyAjayRequest",Class.new {
def matches?(request)
request.xhr?
end
}
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。