Как включить полный путь в Rails 3 оператор link_to? - PullRequest
15 голосов
/ 22 февраля 2012

Я пытаюсь поместить оператор Rails link_to в электронное письмо Mailer, содержащее полный путь (т. Е. - http://localhost/contacts/id/confirm). Оператор link_to, который я пробую, работает в моем стандартном представлении в / pages / options, нонет в письме Mailer.

Вот мой / pages / options Код контроллера:

class PagesController < ApplicationController
    def options
    end
end

А вот страницы / options View:

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

Когда япоместите эту ссылку в следующий почтовик (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>

Сообщение об ошибке:

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>

Ответы [ 6 ]

19 голосов
/ 22 февраля 2012

Первый шаг:

#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) %>
13 голосов
/ 22 февраля 2012

Поскольку почтовые программы не запускаются внутри стека ответов, они не знают, с какого хоста они были вызваны: вот почему вы сталкиваетесь с этой ошибкой. Это легко исправить, изменив код для включения хоста:

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

Вы также можете установить хост по умолчанию для каждого приложения внутри вашего application.rb (или любой из ваших сред), указав это:

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

Чтобы получить полную документацию по ActionMailer и узнать, почему возникает эта проблема, ознакомьтесь с документацией ActionMailer .

2 голосов
/ 26 мая 2013

Исходя из текущих руководств http://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views, я думаю, что лучший способ - использовать url_for и настроить хост в файле конфигурации среды.Или еще лучше использовать название маршрута.

Пример с именованным маршрутом

link_to @user.fullname, user_url(@user)
1 голос
/ 22 февраля 2012

Вам необходимо предоставить опцию :host с link_to.

. Вы также можете установить для файлов config.action_mailer.default_url_options в config / environment / *. Rb соответствующие настройки.поэтому они выбраны для link_to во всех почтовых программах

например -

в config / средах / production.rb

config.action_mailer.default_url_options = { :host => 'www.example.com' }
0 голосов
/ 25 мая 2016

Если полный URL-адрес всегда совпадает с запросом пользователя, вы можете альтернативно использовать гем actionmailer-with-request для перенаправления запроса в action mailer, тогда вы можете ссылаться на запрос в своем почтовом шаблоне, например:

<%= link_to "log into the admin page", request.base_url + admin_root_path %> 
0 голосов
/ 22 февраля 2012

Я думаю, вам нужно передать хост перед фильтром при использовании его в формате электронной почты. Я помню, как использовал эту страницу, когда у меня была похожая проблема: http://www.cherpec.com/2009/06/missing-host-to-link-to-please-provide-host-parameter-or-set-default_url_optionshost/

Вот пост SO на нем тоже с другим дублем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...