1

ばかげたエラーだと強く感じており、どういうわけかそれを見抜くことができません。このコードをメーラーのビューで使用しようとしています。

<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

終わり

4

2 に答える 2

1

この unsubscribe_url (または _path) は他のビューでも機能しますか?

返される値は、Hash を String に変換したもののように見えます。"link_to()" によって返されたオブジェクトで .inspect を呼び出してみてください。何か手がかりがあるのではないでしょうか?

コードのどこかで何かが 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
于 2010-10-28T09:39:01.347 に答える
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         "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

(これがどのように適合するかについては、上記の例を参照してください)

于 2010-10-28T08:15:07.433 に答える