Problem mit dem Rest-ful link_to mit, während es in einem Mailer mit
-
27-09-2019 - |
Frage
Ich fühle mich stark, es ist ein dummen Fehler und ich bin irgendwie nicht in der Lage zu durchschauen. Ich versuche, dieses Stück Code in der Ansicht meines Mailer zu verwenden.
<p><%= link_to 'here', unsubscribe_path(:email => "a@b.com") %></p>
Und ich habe eine benannte Route definiert in meiner Routen-Datei:
map.unsubscribe '/unsubscribe', :controller => :users, :action => :unsubscribe
Also, wenn ich meine E-Mail ist dies die Verbindung, die ich bekommen:
http://b.comonly_pathtruecontrollerusersactionunsubscribe/
Irgendwelche Ideen? Vielen Dank !
Bearbeiten
Hier ist die Ansicht:
<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>
Und hier ist die Mailer:
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
Ende
Lösung
Hier ist ein Beispiel einer Arbeitsvorlage, kann ich nicht sicher sagen, warum Ihr nicht funktioniert, sondern versuchen, die URL in der Anmelder zu erzeugen.
# 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
Sie müssen eine URL generieren, anstatt ein Weg.
eg:
account_path => /account
account_url => http://domain.com/account
edit: dies sollte funktionieren:
#notifier
body :unsubscribe_url => unsubscribe_url(:email => "a@b.com")
#template
= word_wrap "Click #{@unsubscribe_url} to unsubscribe.", :line_width => 60
(siehe oben Beispiel dafür, wie dies paßt alles zusammen)
Andere Tipps
Ist dieses UNSUBSCRIBE_URL (oder _path) Arbeit in jeder anderen Ansicht?
Der Rückgabewert sieht aus wie ein etwas aus einem Hash gemacht umgewandelt String. Versuchen Sie, rufen Sie .inspect auf das Objekt zurück von „link_to ()“ - vielleicht gibt es einen Hinweis sein
Vielleicht neu definierte etwas eine link_to Methode irgendwo in Ihrem Code? Verwenden Sie "grep def * link_to.?" - vielleicht ein paar Hinweise werden da sein
Es kann ein Test in diesem und in späteren Fällen nützlich sein. Hier ist ein Beispiel (aber das ist, was ich in Schienen 1 verwenden, aber ich hoffe, dass dies nicht zu viel in Ihrer Schienen-Version unterscheidet).
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