在邮件中我试图这样做:
def registartion
..
@login_url = login_users_path(@path)
..
end
但它正在通过一个错误,它也无法在控制台中运行。 'undefined method login_users_path ...'
答案 0 :(得分:2)
请参阅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”变体才有意义。
答案 1 :(得分:0)
布兰登回答了这个问题,但供将来参考:
作为访问控制台中路线的提示:
要在控制台中访问路线,您可以使用以下格式:
app.{insert_route_here}
所以在你的情况下:
app.login_users_path
答案 2 :(得分:0)
除了@Brandon Tilley的答案之外,如果您定义(用于开发):host
,则可以避免必须指定environments/development.rb
:
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
然后你可以这样做:
@login_url = login_users_url(@path)
您希望在电子邮件中使用完全限定的网址(http://example.com/something)而不是相对路径(/某些内容)!