在 Ruby 中使用 send() 将对象传递给方法时出错

Error passing object to method using send() in Ruby

我在使用 send() 调用方法时遇到问题,同时将对象传递给所述方法。我收到 undefined method ``employee_feedback(#<WorkItem:0x000000057cc7c0>)' for WorkItemMailer:Class 错误。

这是我的 work_item.rb 模型:

  def send_work_item_mail
    forms_needing_mail = ["employee", "install", "repair"]
    if forms_needing_mail.include?(self.form)
      WorkItemMailer.send("#{self.form}_feedback(#{self})").deliver_now
    end
  end

被称为:

  @work_item.send_work_item_mail 

在我的 work_items_controller.rb

下面是我的邮件程序中的方法:

  def employee_feedback(work_item)
    @work_item = work_item
    @employee  = User.find_by(id: @work_item.employee)
    @manager   = User.find_by(id: @employee.manager)
    mail to: @manager.email, subject: "Employee feedback for #{@employee.name}"
  end

是我使用发送不正确,还是这里有其他问题?

试试这个

WorkItemMailer.send("#{self.form}_feedback".to_sym, self).deliver_now

在对象上调用 send 与直接调用方法相同。区别在于您将方法名称作为参数传递给 send。 后续要发送的参数(在方法名称之后)作为方法中的参数传递

所以这个:

WorkItemMailer.employee_feedback(self)

应称为:

WorkItemMailer.send(:employee_feedback, self)

你的情况:

WorkItemMailer.send("#{self.form}_feedback", self).deliver_now