【发布时间】:2019-10-20 14:47:59
【问题描述】:
我的模型中包含 helpers 方法时遇到问题。
我的助手如下:
class Booking < ApplicationRecord
include BookingsHelper
include PaymentsHelper
BookingsHelper 和PaymentsHelper 都具有slack_notify 功能。
所以为了调用好的slack_notify函数我调用这个函数如下:
BookingsHelper.slack_notify(self)
PaymentsHelper.slack_notify(requester.email, 'danger', 'booking:proceed_payment', e.message)
当我运行我的测试(使用 rspec)时,我得到了:
Failure/Error: BookingsHelper.slack_notify(self)
NoMethodError:
undefined method `slack_notify' for BookingsHelper:Module
我注意到如果我更改:BookingsHelper.slack_notify(self) 由 slack_notify(self) 它可以工作,但在 PaymentsHelper 中调用 slack_notify 所以我真的不明白发生了什么。如果我删除了PaymentHelper,它就会调用好一个
如果有人能强调我的这种行为,我真的很想了解发生了什么
谢谢
【问题讨论】:
-
您假设 Ruby 生成每个模块函数的静态版本 - 事实并非如此。
-
@maxpleaner 感谢您的回答,但我一定会明白您的意思
-
这里使用术语“助手”是不恰当的。在 Rails 中,帮助程序是在控制器和视图层中使用但几乎从不在模型层中使用的模块。用于 DRY 模型的模块称为
concern,通常以它实际带来的功能命名,例如Commentable。
标签: ruby-on-rails ruby rspec ruby-on-rails-5