0

Rails 3の使用。以下のコードの最初のスニペットによると、メーラービューからパーシャルをレンダリングしようとしたときに、このエラーが何を意味するのかをグーグル検索するのは困難です。

これはエラーです:

ActionView::Template::Error (undefined method `long_date' for #<#<Class:0x00000102452ab0>:0x00000102440b30>):

これが私のメーラービューです(email_note.html.erb)

<div style="width:500px;">
  <%= render :partial => "shared/note", :object => @note %>
</div>

これは、エラーをスローしているパーシャルで行っている呼び出しです<%= long_date(note.created_at)%>

long_dateは、他のアクションから部分的な@noteオブジェクトを指定したときに常に機能します(たとえば、notes_controllerの「show」)。これが方法です

def long_date(date)
  date.strftime('%A %b %e, %G')
end

これが私のActionMailerクラスです(アドレスとnote_idは私のnotes_controllerの「email」アクションから送信されます)

class UserMailer < ActionMailer::Base
 default :from => "gminett@gmail.com"

  def email_note(address,note_id)
    @note = Note.find(note_id)
    mail(:to => "#{address}", :subject => "Note from repository: #{@note.subject}")
  end
end

Railsは(おそらく私の側の見落としが原因で)@noteオブジェクトをNoteクラスとして解釈していないようですが、修正する方法がわかりません。ヘルプは大歓迎です。

4

1 に答える 1

1

これは、デフォルトで ActionMailer テンプレートが ActionView テンプレートと同じヘルパーを共有しないためです。メーラー テンプレートでヘルパーを使用する必要がある場合は、モジュールを ActionMailer クラスに含めてみてください。

include DateTimeHelper
于 2011-04-12T08:41:33.617 に答える