1

私は次のモデルを持っています、

class Exam 
  has_many :registrations
end

class Registration
  belongs_to: user
  belongs_to: lesson
end

class Lesson
  has_many :exam_registrations
  belongs_to :user
end

class User
  has_many :registrations, :through => lessons
end

試験が更新されるたびに、登録されているすべてのユーザーに電子メールが配信されるように、自動化された電子メールを設定しようとしています。アクションメーラーをセットアップして、ネストされていない他のリソースで動作させていますが、この特定のケースは、過去数日間私を困惑させました.

mailer.rb

  def inform_exam_venue(user, student, lesson, exam_registration, exam)
    @user = user
    @student = student
    @lesson = lesson
    @exam_registration = exam_registration
    @exam = exam
    mail(:to => "#{student.name} <#{student.email}>", :subject => "Exam registration update")
  end

Exams_controller.rb

  def update
    @exam = Exam.find(params[:id])

    @exam_registration = @exam.exam_registrations.find(params[:id])

    @lesson = @exam_registration.lesson
    @user = User.where("id =? ", @exam_registration.user_id).first
    @student = Student.where("id =? ", @exam_registration.student_id).first

    respond_to do |format|
      if @exam.update_attributes(params[:exam])
        Mailer.inform_exam_update(@user, @student, @lesson, @exam_registration, @exam).deliver
        format.html { redirect_to @exam, notice: 'Exam was successfully updated.' }
      else
        format.html { render action: "edit" }
      end
    end
  end

私のコントローラーコードは明らかに間違っていますが、これを設定する方法についての指示が見つからないようです。助けてください。

4

1 に答える 1

1

私があなたのコードで見つけた唯一の問題は、コントローラーで使用していることです

Mailer.inform_exam_update

それ以外の

Mailer.inform_exam_venue

したがって、_update_venueに変更する必要があります。

于 2013-09-08T08:25:06.547 に答える