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

12 浏览
0 Comments

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

我试图将一个Rails的link_to语句放在一个Mailer邮件中,其中包含完整路径(即- http://localhost/contacts/id/confirm)。我尝试的link_to语句在我的标准视图/pages/options中可以工作,但在Mailer邮件中却不起作用。

这是我的/pages/options控制器代码:

class PagesController < ApplicationController
    def options
    end
end

以下是pages/options视图:

    <%= link_to "here", :controller => "contacts", :action => "confirm", 
    :only_path => false, :id => 17 %>

当我将这个链接放入以下邮件(welcome_email.html.rb)中时,我遇到了下面的错误。非常感谢您提供的任何帮助。




    


    <%= link_to "here", :controller => "contacts", :action => "confirm",
     :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:     
5:   
6:   
7:     <%= link_to "here", :controller => "contacts", :action => "confirm", :only_path    
=> false, :id => 17 %>
8:   
9: 

0
0 Comments

Rails 3中的link_to语句如何包含完整路径?

根据当前的指南http://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views,我认为最好的方法是使用url_for并在环境配置文件中配置主机。或者更好的办法是使用命名路由。

以下是使用命名路由的示例:

link_to .fullname, user_url()

问题的出现原因:

基于当前指南,用户需要在Rails 3中创建一个包含完整路径的链接。然而,指南中提供的示例不够明确,没有给出具体的代码示例。

解决方法:

为了解决这个问题,用户可以使用url_for方法,并在环境配置文件中配置主机。另外,使用命名路由也是一个更好的解决方法。

通过使用命名路由,用户可以通过指定路由的名称来创建包含完整路径的链接。上述示例代码中的user_url()是一个命名路由,它将返回一个包含完整路径的链接。

这样,用户就可以在Rails 3中创建包含完整路径的链接了。

0
0 Comments

问题的出现的原因是邮件发送器(mailers)在响应堆栈(response stack)中不运行,因此它们不知道从哪个主机(host)调用,这就是为什么你会遇到这个错误的原因。解决方法很简单,只需修改代码以包含主机(host)信息即可:

<%= link_to "here", :controller => "contacts", :action => "confirm",

:only_path => false, :id => 17, :host => "example.com" %>

你还可以在application.rb(或任何环境文件)中按应用程序设置默认主机(host),方法如下:

config.action_mailer.default_url_options = { :host => "example.com" }

有关ActionMailer以及为什么会出现这个问题的完整文档,请查看ActionMailer文档

0
0 Comments

问题的出现原因是在Rails 3中,link_to语句中默认不包含完整路径。解决方法是在开发环境和生产环境的配置文件中设置默认的URL选项,并使用confirm_contacts_url()方法而不是confirm_contacts_path()方法来生成链接。

0