我有一个动态调用邮件程序的方法,如下所示:
def mail
application = mail[:application].capitalize
class_template = mail[:template].split('/').[0]+ 'Mailer'
template = mail[:template].split('/').second
email_params = mail[:params].values.map(&:inspect).join(', ')
"#{application}::#{class_template}.#{template}(#{email_params}).deliver_now"
# Here I have something like : "Application::TemplatetMailer.test_name(\"John\", \"Doe\").deliver_now"
end
我怎么能有这样的东西:
Application::TemplatetMailer.test(\"John\", \"Doe\").deliver_now
代替
"Application::TemplatetMailer.test(\"John\", \"Doe\").deliver_now"
1条答案
按热度按时间cqoc49vn1#
可以使用
constantize
查找任意常量:极其小心你允许终端用户的访问权限。不要以允许他们对任意类进行任意方法调用的方式公开它。拥有类和方法的允许列表要安全得多。