15 Stimmen

Wie man full-path in Rails 3 link_to-Anweisung enthalten?

Ich versuche, eine Rails link_to-Anweisung innerhalb einer Mailer-E-Mail zu setzen, die den vollständigen Pfad enthält (dh - http://localhost/contacts/id/confirm ). Die link_to-Anweisung, die ich versuche, funktioniert in meiner Standardansicht in /pages/options, aber nicht in der Mailer-E-Mail.

Hier ist mein /pages/options Controller Code:

class PagesController < ApplicationController
    def options
    end
end

Und hier ist die Seiten/Optionen-Ansicht:

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

Wenn ich diesen Link in den folgenden Mailer (welcome_email.html.rb) einfüge, erhalte ich den folgenden Fehler. Für jede Hilfe wäre ich Ihnen sehr dankbar.

<!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>

Die Fehlermeldung:

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>

21voto

zolter Punkte 6840

Erster Schritt:

#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' }

Zweiter Schritt:

<%= link_to "here", confirm_contacts_url(17) %>

13voto

Veraticus Punkte 15844

Da Mailer nicht innerhalb des Antwortstapels ausgeführt werden, wissen sie nicht, von welchem Host aus sie aufgerufen wurden: Deshalb tritt dieser Fehler auf. Das ist leicht zu beheben: Ändern Sie den Code so, dass er den Host enthält:

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

Sie können den Standard-Host auch für jede einzelne Anwendung in Ihrer application.rb (oder jeder Ihrer Umgebungen) festlegen, indem Sie dies angeben:

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

Die vollständige Dokumentation zu ActionMailer und den Gründen für das Auftreten dieses Problems finden Sie in der ActionMailer-Dokumentation .

2voto

Victor Martins Punkte 1235

Auf der Grundlage der aktuellen Leitfäden http://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views Ich denke, der beste Weg ist die Verwendung von url_for und die Konfiguration eines Hosts in der enviroment config Datei. Oder noch besser, eine Namensroute zu verwenden.

Beispiel mit benannter Route

link_to @user.fullname, user_url(@user)

1voto

abhishek Punkte 998

Sie müssen die :host mit der Option link_to .

Sie können auch die config.action_mailer.default_url_options en config/environments/*.rb Dateien mit den entsprechenden Einstellungen, damit sie für link_to in allen Mailern ausgewählt werden

z.B. -

in config/environments/production.rb

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

0voto

ScottJShea Punkte 6923

Ich denke, Sie müssen den Host in einem Vorfilter übergeben, wenn Sie ihn in einem E-Mail-Format verwenden. Ich erinnere mich, diese Seite benutzt zu haben, als ich ein ähnliches Problem hatte: http://www.cherpec.com/2009/06/missing-host-to-link-to-please-provide-host-parameter-or-set-default_url_optionshost/

Hier ist ein SO Beitrag dazu mit einer anderen Sichtweise

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X