rails应该发送电子邮件的调用方法

时间:2013-11-16 19:30:06

标签: ruby-on-rails email methods parameter-passing params

所以,我有一个带有一些学生网格的索引页面。只需一个按钮,我就可以通过电子邮件方式向@students = Student.all

中的所有学生发送电子邮件

如何调用方法?

该方法的参数是@students,是不是?

<%= link_to 'Email', send_to_student_path(@students) %>

正如我所见here

StudentController.rb

  def send_to_student()
   #binding.pry
   @students.each do |student|
     StudentMailer.email_recall(student).deliver
    end
  end

和梅勒:

class StudentMailer < ActionMailer::Base

    def email_recall(student)
        @url  = 'http://example.com/login'
        mail(to: @student.email, 
            from: current_user.email,
            subject: 'Valid your datas') 

    end
end

在routes.rb中我有:

resources :students do 

    member do
        post :send_to_student
    end
end

第一个问题: 如何从方法参数中的@students = Student.all传递每个学生的id?

第二个问题: 如何以正确的方式调用send_to_student方法?

非常感谢提前

尼古拉斯

1 个答案:

答案 0 :(得分:0)

1)您使用它的方式,您将通过路径传递ID,例如:students/:id/send - 您可以阅读有关member routing on the Rails documentation的更多信息。这将设置params[:id]的参数,您可以在操作中使用

或者,如果您要向所有学生发送消息,您可以使用我在下面创建的控制器功能:


2)我认为你通常可以使用Model Method。这是您在模型中放置功能,清理控制器的地方

我不知道它是否适用于邮件程序,但我会尝试这个:

  #app/controllers/students_controller.rb
  def index
      @students = Student.all
      Student.send_to_students(@students)
  end

  #app/models/student.rb
  def self.send_to_student(students)
      students ||= self.all # -> not sure about the self.all call
      students.each do |student|
          StudentMailer.email_recall(student).deliver
      end
  end