Ruby on rails 如何在Rails 3 link_to语句中包含完整路径?

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

我试图在一封包含完整路径(ie-)的邮件中添加Rails link_to语句。指向我正在尝试的声明的链接在/pages/options中的标准视图中有效,但不在Mailer电子邮件中有效

以下是my/pages/options控制器代码:

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 %>