Tengo un módulo Blockable
que contiene asociaciones y métodos para ser incluido en algunas otras clases de ActiveRecord
.Rieles: ¿Cómo puedo definir una extensión de asociación en un módulo que se incluye en mi modelo AR?
código relevante:
module Blockable
def self.included(base)
base.has_many :blocks
end
end
Quiero agregar una extensión asociación. La sintaxis usual (es decir, cuando no estoy definiendo la asociación en un módulo) es la siguiente:
# definition in Model < ActiveRecord::Base
has_many :blocks do
def method_name
... code ...
end
end
# usage
Model.first.blocks.method_name
Esta sintaxis no funciona cuando se utiliza en el módulo que se incluye en el modelo de AR. Obtengo un undefined method 'method_name' for #<ActiveRecord::Relation:0xa16b714>
.
¿Alguna idea sobre cómo debo definir una extensión de asociación en un módulo para su inclusión en otras clases de AR?
Su módulo se ve bien, parece que lo está llamando incorrectamente. 'Model.blocks' no debería funcionar. Lo está llamando a un objeto y no a una instancia de ese objeto. Pruebe 'Model.first.blocks.method_name'. –
Lo siento, falla el ejemplo por mí. He estado intentando llamarlo en una instancia: he actualizado mi pregunta para solucionar esto. – nfm