2010-10-28 5 views
1

Я сильно чувствую, что это глупая ошибка, и я как-то не могу ее увидеть. Я пытаюсь использовать этот фрагмент кода в представлении моей почтовой программы.Проблема с использованием ссылки REST-ful_to при использовании в почтовом сообщении

<p><%= link_to 'here', unsubscribe_path(:email => "[email protected]") %></p> 

И я определил именованного маршрут в моем файле маршрутов:

map.unsubscribe '/unsubscribe', :controller => :users, :action => :unsubscribe 

Так что, когда я отправить почту это ссылка, я получаю:

http://b.comonly_pathtruecontrollerusersactionunsubscribe/ 

Любые идеи? Благодаря !

EDIT

Вот вид:

<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 => "[email protected]") %></p> to unsubscribe</p> 
</body> 
</html> 

А вот почтовая программа:

class Alert < ActionMailer::Base 

def send(alert, email) 
    @subject = "hi" 
    @recipients = "[email protected]" 
    @from = "[email protected]" 
    @sent_on = Time.now 
    @content_type = "text/html" 

    @alert = alert 
    @email = email 
end 

конец

+0

Почему бы просто не использовать 'link_to 'здесь',«HTTP: //xxx.com/unsubscribe электронной почты = а @ b.com'' – shingara

+0

Да, что будет работать?. Но это не хорошая практика для жестких кодов, например, так? Спасибо в любом случае, придется использовать его, пока я не получу решение, чтобы оно было REST-ful. – Shreyas

+0

. Можете ли вы включить в свой вопрос, как вы генерируете свою электронную почту. Маршрут в порядке, так что это должен быть ваш уведомитель или шаблон. – mark

ответ

1

Вот пример рабочего шаблона, я могу» скажите наверняка, почему ваш не работает, но попробуйте создать 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   "[email protected]" 
    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 [email protected]", :line_width => 60 

Вам нужно будет создать URL-адрес, а не путь.

eg: 
account_path => /account 
account_url => http://domain.com/account 

редактировать: это должно работать:

#notifier 
body   :unsubscribe_url => unsubscribe_url(:email => "[email protected]") 

#template 
= word_wrap "Click #{@unsubscribe_url} to unsubscribe.", :line_width => 60 

(см выше пример того, как это все совмещается)

1

ли это unsubscribe_url (или _path) работать в какой-либо другой точки зрения?

Возвращаемое значение выглядит как нечто сделанное из хэша, преобразованного в String. Попробуйте вызвать .inspect на объект, возвращенный «link_to()» - может быть, будет какая-то подсказка?

Возможно, что-то переопределило метод link_to где-то в вашем коде? Используйте «grep def. * Link_to» - возможно, будут какие-то подсказки?

Тест может быть полезен в этом и последующих случаях. Вот пример (однако это то, что я использую в rails 1, но я надеюсь, что это не сильно отличается в версии ваших рельсов).

def test_routing 
    assert_routing '/unsubscribe', {:controller => 'user', :action => 'unsubscribe'} 
    assert_recognizes Hash[:controller => 'user', :action => 'unsubscribe'], 
     {:path=>'/unsubscribe', :method => :get}, 
     {"email"=>"[email protected]"} 
    # ..and so on 
end