module YourApp
class Application < Rails::Application
config.my_custom_variable = :custom_value
end
end
这适用于我的Rails应用程序。我只想从ruby的角度理解这是如何工作的。根据我的最小ruby知识,在config(Rails :: Application :: Configuration)对象中必须有my_custom_variable的getter和setter(my_custom_variable =)。由于这是我的自定义变量,因此它不会出现在Configuration对象实例中。它是如何动态创建/添加的。 ?
有人可以解释一下吗?请指导我使用正确的文件来理解这一点。
答案 0 :(得分:2)
Rails在这里使用method_missing
来捕获config
上调用的任何方法。
然后,它只是将它添加到选项的散列中。
您可以看到相关的源代码here。
答案 1 :(得分:0)
不是Rails如何实现它,而是在Ruby中实现类似的功能
require 'ostruct'
module YourApp
class Application
@@config = OpenStruct.new
def self.config
return @@config
end
end
end
YourApp::Application.config.my_custom_variable = :custom_value
puts YourApp::Application.config.my_custom_variable
>> custom_value