代码之家  ›  专栏  ›  技术社区  ›  Mike Sutton

Rails:在ActionMailer视图中生成完整的URL

  •  16
  • Mike Sutton  · 技术社区  · 15 年前

    我正在使用ActionMailer发送注册确认电子邮件。电子邮件需要包含一个链接回到该网站,以验证用户,但我不能说服Rails生成一个完整的URL(包括域等)。

    <%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
    

    在我看来

    在开发模式下,如果我没有在上面的链接中明确指定主机,Rails会抱怨。但我不想在生产中这样做。有什么解决办法吗?

    5 回复  |  直到 15 年前
        1
  •  17
  •   Simone Carletti    15 年前

    要解决在ActionMailer中传递用于生成URL的主机的问题,请检查 this plugin 以及 reason why I wrote it

    <%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
    

    假设路线被称为 login

    <%= login_url(:guid => @user.new_user.guid) %>
    

    login_url login_path .

        2
  •  12
  •   Kylo    15 年前

    config.action_mailer.default_url_options = {
      :host => "your.host.org",
      :port => 3000
    }
    

    您可以在config/environments/production.rb中执行相同的操作

        3
  •  6
  •   JackyJohnson    11 年前

    我不知道为什么以前的解决方案看起来这么复杂,但既然我在这里,为什么不给我的2美分。。。

    /config/environments

    config.absolute_site_url = 'your site url'

    这允许你打电话 Rails.application.config.absolute_site_url

        4
  •  1
  •   Manish Shrivastava Gambai    13 年前

    使用资产主机 documentation . 您需要指定一个 asset_host "#{request.protocol}#{request.host_with_port}/login/?guid=#{@user.new_user.guid}"

        5
  •  -1
  •   Vladimir Raileanv    7 年前

    Rails.application.routes.url_helpers.user_url(User.first.id, host: 'yourhost.io')
    

    这将生成如下url:

    http://yourhost.io/users/1

    你也可以传递一些参数

    expires = Time.now + 2.days
    params = {expires: expires}
    u = User.first.id
    
    Rails.application.routes.url_helpers.user_url(u, params, host: 'host.com')
    

    http://yourhost.io/users/1.expires=2018-08-12+15%253A52%253A15+%252B0300