gke*_*epa 1 ruby model ruby-on-rails
我在模型中遇到以下问题:
class Search < ActiveRecord::Base
#search different system user by dn
def self.gets(sys, dn)
sys.constantize.search(dn)
end
end
Run Code Online (Sandbox Code Playgroud)
我可以看到,目的是传递不同的模型名称,sys
并dn
在这些特定模型中进行搜索。但是,我constantize
在Ruby中进行了搜索,看不到有关此用法的任何详细说明。
Rails文档(因为常量化是一种Rails方法)说:
尝试查找具有参数字符串中指定名称的常量。
例如,如果您的应用程序中有一个名为Foo的模型,则可以将常量化方法应用于包含确切词Foo的字符串,它将为您提供该模型的新对象。请注意,这必须大写,因为Rails可以在您的模型中使用,如果引用不正确,则会出现NameError
错误:
NameError: wrong constant name foo
Run Code Online (Sandbox Code Playgroud)
它是如何做到的?如果转到方法定义,或者在使用该方法时遇到错误,则会看到指向的源activesupport-5.1.5/lib/active_support/inflector/methods.rb:269:in 'const_get'
,即方法定义和错误源。
在两种情况下,该方法根据作为参数接收的内容在内部进行处理,您将看到Object.const_get(string)
Ruby(纯)处理“常量”的方式,这与
Object.const_get('Foo') # Foo(...)
Object.const_get('foo') # NameError: wrong constant name foo
Run Code Online (Sandbox Code Playgroud)
如果想实施这种方便的方法,可以看看几年前Gavin Miller的帖子。
归档时间: |
|
查看次数: |
2656 次 |
最近记录: |