【发布时间】:2011-02-03 23:12:17
【问题描述】:
我有一个 Blockable 模块,其中包含要包含在其他几个 ActiveRecord 类中的关联和方法。
相关代码:
module Blockable
def self.included(base)
base.has_many :blocks
end
end
我想添加一个关联扩展。通常的语法(即当我没有在模块中定义关联时)是这样的:
# definition in Model < ActiveRecord::Base
has_many :blocks do
def method_name
... code ...
end
end
# usage
Model.first.blocks.method_name
当在 AR 模型中包含的模块中使用时,此语法不起作用。我收到了undefined method 'method_name' for #<ActiveRecord::Relation:0xa16b714>。
知道我应该如何在模块中定义关联扩展以包含在其他 AR 类中吗?
【问题讨论】:
-
您的模块看起来不错,只是您似乎调用不正确。
Model.blocks不应该工作。您是在一个对象上调用它,而不是在该对象的实例上调用它。试试Model.first.blocks.method_name。 -
对不起,我的例子失败了。我一直试图在一个实例上调用它 - 我已经更新了我的问题来解决这个问题。
标签: ruby-on-rails ruby-on-rails-3 activerecord associations