Rails 4 Scopes e resposta as_json

Tenho trabalhado em uma API Rails (meu primeiro projeto Rails).

Eu queria configurar um namespace (semelhante a ter namespaces para controladores) para meus modelos. Por quê? Porque eu tinha um método as_json da seguinte maneira:

def as_json(options={})
super(options.merge({:include=> {:attachments => {}, :rounds=> {}}}))
end

Dependendo de quem fez a solicitação (ou seja, /user/position/vs /organisation/position/), eu precisava de uma resposta JSON ligeiramente diferente

Finalmente tropecei em Scopes .

Acabei substituindo o método as_json de duas maneiras diferentes.

scope :user, -> {
def as_json(options={})
super(options.merge({:include=> {:attachments=> {}, :rounds=> {}}}))
end
}

vs

scope :organisation, -> {
def as_json(options={})
super(options.merge({:include=> {:applications=> {}}}))
end
}

Agora eu posso Position.user.allou Position.organisation.alldependendo da resposta json que eu quiser.

Fonte: Este é um post de blog bem escrito onde me inspirei.

Escopos Active Record vs métodos de classe