99m*_*les 2 routing ruby-on-rails devise
我有一个来自Devise的url helper如下:
account_confirmation_url(@resource, :confirmation_token => @resource.confirmation_token)
Run Code Online (Sandbox Code Playgroud)
如何使用当前子域而不是主子域创建URL?
Obi*_*bie 13
Devise wiki中描述的主要解决方案不适用于设置任意子域,如果您在一个子域(或应用程序的根域)中的请求期间触发生成电子邮件并且想要电子邮件中的链接,则会出现问题引用不同的子域.
使其成功的普遍接受的方法是给url_for帮助者一个:subdomain选择.
# app/helpers/subdomain_helper.rb
module SubdomainHelper
def with_subdomain(subdomain)
subdomain = (subdomain || "")
subdomain += "." unless subdomain.empty?
host = Rails.application.config.action_mailer.default_url_options[:host]
[subdomain, host].join
end
def url_for(options = nil)
if options.kind_of?(Hash) && options.has_key?(:subdomain)
options[:host] = with_subdomain(options.delete(:subdomain))
end
super
end
end
Run Code Online (Sandbox Code Playgroud)
下一步是至关重要的,我怀疑它是很多人被绊倒的地方(我知道我做了).通过添加以下代码,确保Devise将新的子域助手混合到其邮件程序对象中config/application.rb
config.to_prepare do
Devise::Mailer.class_eval do
helper :subdomain
end
end
Run Code Online (Sandbox Code Playgroud)
现在,当您link_to在Devise邮件程序模板中执行操作时,可以轻松指定:subdomain选项.
link_to 'Click here to finish setting up your account on RightBonus',
confirmation_url(@resource, :confirmation_token => @resource.confirmation_token, :subdomain => @resource.subdomain)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3577 次 |
| 最近记录: |