【问题标题】:Are url helpers only for views?url 助手仅用于视图吗?
【发布时间】:2011-03-13 18:20:19
【问题描述】:

在邮件中我正在尝试这样做:

def registartion

..

   @login_url = login_users_path(@path)

..

end

但它正在通过一个错误,它也不能在控制台中工作。 '未定义的方法 login_users_path...'

【问题讨论】:

  • 您是否运行过 rake 路线并首先确认它存在?
  • 要在 Rails 控制台中使用帮助程序,请使用 app.helper_method,例如 app.login_users_path。但这不是您问题的答案,请参阅我的答案^_^

标签: ruby-on-rails


【解决方案1】:

请参阅 Action Mailer 指南中的 Generating URLs in Action Mailer views。强调我的最后一段(那是应该解决您的问题的部分):

可以使用url_for 或命名路由在邮件视图中生成 URL。

与控制器不同,邮件程序实例没有关于传入请求的任何上下文,因此您需要提供 :host、:controller 和 :action:

<%= url_for(:host => "example.com",
            :controller => "welcome",
            :action => "greeting") %>

使用命名路由时,您只需提供:host:

<%= user_url(@user, :host => "example.com") %>

电子邮件客户端没有 Web 上下文,因此路径没有基本 URL 来形成完整的 Web 地址。因此,当使用命名路由时,只有“_url”变体才有意义。

【讨论】:

    【解决方案2】:

    布兰登回答了这个问题,但供将来参考:

    作为在控制台中访问路由的提示:

    要访问控制台中的路由,您可以使用以下格式:

    app.{insert_route_here}
    

    所以在你的情况下:

    app.login_users_path
    

    【讨论】:

      【解决方案3】:

      除了@Brandon Tilley 的回答,如果您在(用于开发)environments/development.rb 中定义,则可以避免指定 :host:

      config.action_mailer.default_url_options = { :host => 'localhost:3000' }
      

      那么你可以这样做:

      @login_url = login_users_url(@path)
      

      您想在电子邮件中使用完全限定的 URL (http://example.com/something) 而不是相对路径 (/something)!

      【讨论】:

      • 所以在生产中我也需要那个设置吗?
      • 是的,但在production.rb 中,它将是实际的站点地址,例如。 localhost:3000 的 example.com instad。
      • 是的,我只是不想在不需要的时候修改这么多文件,我想我会把它放在我的主站点配置中,谢谢!
      猜你喜欢
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      相关资源
      最近更新 更多