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.all
ou Position.organisation.all
dependendo da resposta json que eu quiser.
Fonte: Este é um post de blog bem escrito onde me inspirei.