Ruby on rails 如何在Rails 3 link_to语句中包含完整路径?
我试图在一封包含完整路径(ie-)的邮件中添加Rails link_to语句。指向我正在尝试的声明的链接在/pages/options中的标准视图中有效,但不在Mailer电子邮件中有效 以下是my/pages/options控制器代码:Ruby on rails 如何在Rails 3 link_to语句中包含完整路径?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我试图在一封包含完整路径(ie-)的邮件中添加Rails link_to语句。指向我正在尝试的声明的链接在/pages/options中的标准视图中有效,但不在Mailer电子邮件中有效 以下是my/pages/options控制器代码: class PagesController < ApplicationController def options end end class PagesController“确认”, :only_path=>false,:id=>17
class PagesController < ApplicationController
def options
end
end
class PagesController
以下是页面/选项视图:
<div>
<%= link_to "here", :controller => "contacts", :action => "confirm",
:only_path => false, :id => 17 %>
</div>
“联系人”,:操作=>“确认”,
:only_path=>false,:id=>17%>
当我把这个链接放到下面的邮件器(welcome_email.html.rb)中时,我得到了下面的错误。在此方面的任何帮助都将不胜感激
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
<body>
<%= link_to "here", :controller => "contacts", :action => "confirm",
:only_path => false, :id => 17 %>
</body>
</html>
“联系人”,:操作=>“确认”,
:only_path=>false,:id=>17%>
错误消息:
RuntimeError in Contacts#create
Showing C:/Documents and Settings/Corey Quillen/My Documents/Dev/Dev
Projects/my_project
Project/my_project/app/views/user_mailer/welcome_email.html.erb where line #7
raised:
Missing host to link to! Please provide :host parameter or set
default_url_options[:host]
Extracted source (around line #7):
4: <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
5: </head>
6: <body>
7: <%= link_to "here", :controller => "contacts", :action => "confirm", :only_path
=> false, :id => 17 %>
8: </body>
9: </html>
联系人中的运行时错误#创建
显示C:/Documents and Settings/Corey Quillen/My Documents/Dev/Dev
项目/my_项目
Project/my_Project/app/views/user_mailer/welcome_email.html.erb其中第7行
提高:
缺少要链接到的主机!请提供:主机参数或设置
默认\u url\u选项[:主机]
提取的源(第7行附近):
4:
5:
6:
7:“联系人”,:操作=>“确认”,:仅路径
=>false,:id=>17%>
8:
9:
您需要为
:host
选项提供指向的链接
您还可以将config/environments/*.rb文件中的config.action\u mailer.default\u url\u选项设置为适当的设置,以便在所有邮件器中为链接选择它们
乙二醇-
在config/environments/production.rb中
config.action_mailer.default_url_options = { :host => 'www.example.com' }
我认为,在以电子邮件格式使用主机时,需要在before筛选器中传递主机。我记得在我遇到类似问题时使用过此页面:
这里有一篇文章也有不同的观点,因为邮件程序不是在响应堆栈中运行的,它们不知道从哪个主机调用它们:这就是为什么您会遇到这个错误。很容易修复,更改代码以包含主机:
<%= link_to "here", :controller => "contacts", :action => "confirm",
:only_path => false, :id => 17, :host => "example.com" %>
有关ActionMailer的完整文档以及出现此问题的原因,请查看。第一步:
#config/environments/production.rb
config.action_mailer.default_url_options = { :host => 'www.example.com' }
#config/environments/development.rb
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
第二步:
<%= link_to "here", confirm_contacts_url(17) %>
根据当前的指南,我认为最好的方法是在Environment config文件中使用url\u来配置主机。或者最好使用名称路由
具有命名路由的示例
link_to @user.fullname, user_url(@user)
如果完整url始终与用户的请求相匹配,您也可以使用actionmailer with request
gem将请求转发给action mailer,然后您可以在邮件模板中引用请求,如:
<%= link_to "log into the admin page", request.base_url + admin_root_path %>
工作正常!谢谢你(和其他人)的帮助!谢谢佐尔特。其他人,如果这仍然不起作用,一件重要但微妙的事情是确保您使用的是confirm\u contacts\u url()和not confirm\u contacts\u path()_path始终返回相对url,即使在配置中正确设置了主机。
<%= link_to "log into the admin page", request.base_url + admin_root_path %>