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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top