ruby-on-rails 更正语法以使用插入调用邮件程序

lg40wkob  于 2023-01-06  发布在  Ruby
关注(0)|答案(1)|浏览(85)

我有一个动态调用邮件程序的方法,如下所示:

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"
cqoc49vn

cqoc49vn1#

可以使用constantize查找任意常量:

mailer = [ application, class_template ].join('::').constantize

mailer.send(template, *email_params).deliver_now

极其小心你允许终端用户的访问权限。不要以允许他们对任意类进行任意方法调用的方式公开它。拥有类和方法的允许列表要安全得多。

相关问题