Rails - не могу понять, куда поместить очень простой вспомогательный метод форматирования строки - PullRequest
0 голосов
/ 20 февраля 2011

решаемая. См. Примечания 2 и 3.


Полагаю, я просто не понимаю классы в рельсах 3 + ruby ​​1.9.2 ...

Мы используем actionmailer вместе с delayedjob. Все работает нормально, КРОМЕ я просто пытаюсь раскрасить некоторые телефонные номера и пытаюсь поставить простой метод pretty_phone (для форматирования номера телефона) КУДА-ТО, который не выдает ошибку:

Class#sample_email failed with NoMethodError: undefined method `pretty_phone'

Я пробовал это в model_helper.rb, application_helper.rb и в классе, поскольку, как мне кажется, это модель для нашей электронной почты foo_mailer.rb (FooMailer

Наш проект настроен так:

app
  controllers
    widgets_controller.rb
  helpers
    application_helper.rb
    widgets_helper.rb
  mailer
    foo_mailer.rb   ***
  models
    widget.rb
  views
    widget
      (usual edit,show, etc views)
    foo_mailer
      sample_email.html.haml  ***

Это простой метод, который я пытаюсь добавить:

    # num is a string, always in format 12223334444 we want (222)333-4444
  def pretty_phone(num)
     return "(" + num[1,3] + ")" + num[4,3] + "-" + num[7,4]
  end

foo_mailer.rb очень прост:

class FooMailer < ActionMailer::Base

  helper :application         **** THIS ALMOST MAKES IT WORK SEE NOTE 2
  include ApplicationHelper   **** AND THIS ALSO IS REQUIRED NOTE 3

  default :from => "Support <support@mydomain.com>"

  def sample_email(thewidget)
    @widget = thewidget

    send_to = @widget.contact_email
    if !send_to.blank?
      mail :to => send_to,
         :subject => "alert regarding #{pretty_phone(@widget.userphone)}"
    end
  end
end

и вниз по нашему мнению для электронной почты мы также используем #{pretty_phone(@widget.userphone)}

Мне бы очень хотелось понять, почему я не могу поместить этого помощника в application_helper или даже в foo_mailer.rb и заставить его работать - и куда он ДОЛЖЕН идти?

(В настоящее время у меня есть помощник в application_help.rb, и ВСЕ наши представления erb виджетов могут использовать его нормально ... это просто представление электронной почты и / или файл класса foo_mailer.rb, который выдает ошибку.)


Примечание 2

добавив helper :application вверху foo_mailer.rb СЕЙЧАС вспомогательный метод pretty_phone () в application_help.rb работает в VIEWs foo_mailer, но НЕ в самом foo_mailer.rb. Так, например, где я хочу, чтобы pretty_phone () в строке темы письма, он не будет работать. Но в реальных электронных письмах (представлениях) это работает.

Мне это кажется странным - какие-нибудь предложения?


ПРИМЕЧАНИЕ 3 Добавление 'include' И 'helper' - это то, что было нужно.

Ответы [ 2 ]

3 голосов
/ 20 февраля 2011
1 голос
/ 23 февраля 2011

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

...