2

我有可能处于不同状态的提交,并编写了一个 method_missing 覆盖,允许我通过如下调用检查它们的状态

submission.draft?
submission.published?

这非常有效。


由于各种可能不太好的原因,我也有一个模型Packlet,称为belongs_to a meeting和belongs_to a submission。然而,我惊讶地发现

packlet.submission.draft?

返回一个NoMethodError。另一方面,如果我将#draft?方法硬编码到Submission中,则上述方法调用有效。


即使实例是通过 ActiveRecord 关联定义的,如何让我的 method_missing 方法被识别?

4

1 回答 1

2

你添加草稿了吗?你的respond_to的方法?该对象的方法?我的猜测是那里可能会出现问题。键入时会发生什么:

submit.respond_to?(:draft?)

要解决这个问题,实际上要写一个 respond_to? 像这样的方法:

def respond_to?(method, include_priv = false) #:nodoc:
  案例方法.to_sym
  什么时候:草稿?,:发布?
    真的
  别的
    超级(方法,include_priv)
  结尾
结尾

我的建议是在不使用 method_missing 的情况下实现这一点,所以通过像这样进行一些元编程:

班级提交
  [:draft, :published].每个都做 |status|
    定义方法“#{状态}?” 做
      状态 == "#{状态}?"
    结尾
  结尾
结尾
于 2011-02-05T19:35:41.943 回答