在 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
我在使用 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