Ruby on rails 如何使用公寓gem处理电子邮件中的URL
我正在使用Ruby on rails 如何使用公寓gem处理电子邮件中的URL,ruby-on-rails,apartment-gem,Ruby On Rails,Apartment Gem,我正在使用公寓gem进行多租户租赁 除了电子邮件中的URL之外,一切都很好。因此,对于从任何请求和后台作业发送的每封电子邮件,都使用主机的default\u url\u选项 关于如何处理电子邮件中的主机切换有什么建议吗?您可以通过一个小猴子补丁来实现这一点,它允许您使用lambda设置默认的\u url\u选项。将其添加到lib/dynamic\u url\u options并将其包含在您的环境配置中: module ActionDispatch::Routing class RouteSe
公寓
gem进行多租户租赁
除了电子邮件中的URL之外,一切都很好。因此,对于从任何请求和后台作业发送的每封电子邮件,都使用主机的default\u url\u选项
关于如何处理电子邮件中的主机切换有什么建议吗?您可以通过一个小猴子补丁来实现这一点,它允许您使用lambda设置默认的\u url\u选项。将其添加到lib/dynamic\u url\u options
并将其包含在您的环境配置中:
module ActionDispatch::Routing
class RouteSet
alias_method :original_url_for, :url_for
def url_for(options, route_name = nil, url_strategy = UNKNOWN)
dynamic_options = Rails.application.config.respond_to?(:dynamic_url_options) ? Rails.application.config.dynamic_url_options.call : {}
options = options.merge(default_url_options).merge(dynamic_options)
original_url_for options, route_name, url_strategy
end
end
end
然后,您可以在环境配置中按照以下方式执行操作:
config.action_mailer.default_url_options = {
host: 'yourdomain.com'
}
config.dynamic_url_options = lambda {{
subdomain: Apartment::Tenant.current
}}
猴子补丁的另一个想法是:
# app/models/action_dispatch_routing_subdomain_extension.rb
module ActionDispatch::Routing
module RouteSetExtensions
# This allows lambdas as subdomain parameter for `default_url_options`:
#
# config.action_mailer.default_url_options = {
# host: 'example.com',
# protocol: 'https',
# subdomain: lambda { ... }
# }
#
def url_for(options, route_name = nil, url_strategy = ActionDispatch::Routing::RouteSet::UNKNOWN)
if options[:subdomain].respond_to? :call
options[:subdomain] = options[:subdomain].call
end
if Rails.application.config.action_mailer.default_url_options[:subdomain].respond_to? :call
options[:subdomain] ||= Rails.application.config.action_mailer.default_url_options[:subdomain].call
end
super(options, route_name, url_strategy)
end
end
class RouteSet
prepend RouteSetExtensions
end
end
初始值设定项:
# config/initializers/action_dispatch_routing_subdomain_extension.rb
require 'action_dispatch_routing_subdomain_extension'
然后,您可以在子域定义中使用lambda:
# config/environments/production.rb
Rails.application.configure do
# ...
config.action_mailer.default_url_options = {
host: 'example.com',
protocol: 'https',
subdomain: lambda { Apartment::Tenant.current }
}
end