Проблема с использованием REST-FUL LINK_TO при использовании его в почтовом документе
-
27-09-2019 - |
Вопрос
Я сильно чувствую свою глупую ошибку, и я как-то не могу видеть через него. Я пытаюсь использовать этот кусок кода в виду моей почтовики.
<p><%= link_to 'here', unsubscribe_path(:email => "a@b.com") %></p>
И я определил именованный маршрут в моих маршрутах:
map.unsubscribe '/unsubscribe', :controller => :users, :action => :unsubscribe
Поэтому, когда я отправляю свое письмо, это ссылка, которую я получаю:
http://b.comonly_pathtruecontrollerusersactionunsubscribe/
Есть идеи ? Спасибо !
РЕДАКТИРОВАТЬ
Вот мнение:
<html>
<body>
<p>
Hi, <br />
You have an alert for : <%= @alert.name %>. <br />
Here is some brief information about it: <br />
<%= @alert.details %><br /><br />
<br />Thank You,<br />
</p>
<p>
Click <p><%= link_to 'here', unsubscribe_path(:email => "a@b.com") %></p> to unsubscribe</p>
</body>
</html>
И вот почтовый почтовый
class Alert < ActionMailer::Base
def send(alert, email)
@subject = "hi"
@recipients = "xyz@mail.com"
@from = "xyz@mail.com"
@sent_on = Time.now
@content_type = "text/html"
@alert = alert
@email = email
end
конец
Решение
Вот пример рабочего шаблона, я не могу сказать, наверняка, почему ваша не работает, но попробуйте генерировать URL в уверенности.
# notifier
def new_message_email(response)
I18n.locale = response.recipient.language
subject I18n.t(:you_have_received_new_message_from_sender, :sender => response.sender.login)
from "info@domain.com"
recipients response.recipient.email
content_type "text/html"
sent_on Time.now
body :sender_login => response.sender.login, :recipient_login => response.recipient.login
end
#template
= word_wrap "Hi #{@recipient_login}."
= word_wrap ""
%p
= word_wrap "You have received a new personal message from #{@sender_login}.", :line_width => 60
= word_wrap "Click #{link_to 'here', account_inbox_url} to view your domain.com message inbox.", :line_width => 60
= word_wrap "If the above URL does not work try copying and pasting it into your browser. If you continue to have problems, please feel free to contact us at support@domain.com.", :line_width => 60
Вам нужно будет генерировать URL, а не путь.
eg:
account_path => /account
account_url => http://domain.com/account
Редактировать: это должно работать:
#notifier
body :unsubscribe_url => unsubscribe_url(:email => "a@b.com")
#template
= word_wrap "Click #{@unsubscribe_url} to unsubscribe.", :line_width => 60
(см. Приведенный выше пример для того, как это все подходит вместе)
Другие советы
Это отключает обратку_url (или _path) в любом другом представлении?
Возвращенное значение выглядит как что-то из хеша, преобразованного в строку. Попробуйте позвонить .inspect на объекте, возвращенном "link_to ()" - может быть, появится некоторая подсказка?
Может быть, что-то пересмотрено метод link_to где-то в вашем коде? Используйте "grep def. * Link_to" - Может быть, некоторые подсказки будут там?
Тест может быть полезен в этом и более поздних случаях. Вот пример (однако это то, что я использую в Rails 1, но я надеюсь, что это не отличается слишком сильно отличаться в вашей версии Rails).
def test_routing
assert_routing '/unsubscribe', {:controller => 'user', :action => 'unsubscribe'}
assert_recognizes Hash[:controller => 'user', :action => 'unsubscribe'],
{:path=>'/unsubscribe', :method => :get},
{"email"=>"a@example.com"}
# ..and so on
end