Ho un modulo di Blockable
che contiene le associazioni ed i metodi da includere in un paio di altri ActiveRecord
classi.Rails: come si definisce un'estensione di associazione in un modulo che viene incluso nel mio modello AR?
codice rilevante:
module Blockable
def self.included(base)
base.has_many :blocks
end
end
voglio aggiungere un'estensione associazione. La sintassi solito (cioè quando non sto definendo l'associazione in un modulo) è come questo:
# definition in Model < ActiveRecord::Base
has_many :blocks do
def method_name
... code ...
end
end
# usage
Model.first.blocks.method_name
Questa sintassi non funziona quando viene utilizzato nel modulo che è incluso nel modello AR. Ottengo un undefined method 'method_name' for #<ActiveRecord::Relation:0xa16b714>
.
Qualsiasi idea di come dovrei andare sulla definizione un'estensione associazione in un modulo per l'inclusione in altre classi AR?
Il modulo guarda bene, sembra proprio come si sta chiamando in modo errato. 'Model.blocks' non dovrebbe funzionare. Lo stai chiamando su un oggetto e non su un'istanza di quell'oggetto. Provare 'Model.first.blocks.method_name'. –
Mi dispiace, non riesco ad esempio da me. Ho provato a chiamarlo su un'istanza: ho aggiornato la mia domanda per risolvere il problema. – nfm