Как мне объединить две модели для ссылки в электронном письме с помощью Actionmailer - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь создать электронное письмо, которое отправляется, когда родитель (эквивалент пользователя) создает нового ребенка.Я много чего пробовал, но не могу понять, что я делаю неправильно.

У родителей много детей.Младенцы принадлежат родителям.

Я отправляю электронное письмо родителям, добавив

NewBabyMailer.new_baby_email(@parent).deliver

к этому блоку кода в babies_controller.rb

  def create
    @baby = Baby.new(params[:baby])
    @parent = current_parent
    if @baby.save
      # @baby = Baby.find(params[:id])
      NewBabyMailer.new_baby_email(@parent).deliver
      redirect_to(root_url(:host => with_subdomain(@baby.subdomain)), :notice => 'Your baby was successfully added. Share this page with people and tell them to sign up to be notified when your baby is born') 
    else
      render :action => "new" 
    end
  end

В моем новом newbabymailer.rbу меня есть

    class NewBabyMailer < ActionMailer::Base
      default :from => "blah"
      default :bcc => "blah"
      @parent = parent
      @baby = Baby.find_by_parent_id

      # @baby = Baby.where(:parent_id = :params[:id])
      def new_baby_email(parent)
        mail(:to => parent.email, :subject => "Thanks for adding a baby", :bcc => "blah")
      end
    end

Но когда я вызываю такие вещи, как

<%= @baby.name.titleize %>

в моем newbabyemail.html.erb, я получаю

undefined method `baby' for nil:NilClass

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

Ура Павел

1 Ответ

1 голос
/ 10 декабря 2011

Вы пытаетесь установить переменные экземпляра на уровне класса вместо метода, который фактически выполняется.Rails определяет родительский метод Module #, поэтому @parent = parent не вызывает исключение.

Вместо

class NewBabyMailer < ActionMailer::Base
  default :from => "blah"
  default :bcc => "blah"
  @parent = parent
  @baby = Baby.find_by_parent_id

  # @baby = Baby.where(:parent_id = :params[:id])
  def new_baby_email(parent)
    mail(:to => parent.email, :subject => "Thanks for adding a baby", :bcc => "blah")
  end
end

Это должно быть:

class NewBabyMailer < ActionMailer::Base
  default :from => "blah"
  default :bcc => "blah"

  def new_baby_email(parent)
    @parent = parent
    @baby = Baby.find_by_parent_id(parent)
    mail(:to => parent.email, :subject => "Thanks for adding a baby", :bcc => "blah")
  end
end
...