Como carregar uma lista predefinida de um Model customizável?

7 views
Skip to first unread message

Gustavo Porpino

unread,
Aug 19, 2018, 12:05:01 PM8/19/18
to Frevo on Rails
Pessoal, 

Estou com desafio e não sei muito bem como resolver. 

Eu tenho um model Principal que possui uma lista de Dependentes, só que essa lista é predefinida sendo ela configurada pelo usuário. 
Ou seja, ao criar um Principal eu desejo carregar a lista que está configurada pelo usuário. 

Pra facilitar o entendimento trata-se de uma Matrícula escola e a lista de Documentos necessários para a matrícula. Esses documentos podem aumentar com o passar do tempo mas não deve interferir nas matrículas já realizadas. 
 
No momento desenhei dessa forma:
class Enrolment
  has_many
:documents
end

class Document
  attrs
:name, :required, :selected, :enrolment_id #coloquei só pra facilitar o entendimento
  belongs_to
:enrolment
end

def Configuration
  has_many
:documents
end

Nessa estratégia acima eu teria que colocar a foregn key de Configuration em Document também o que não faz sentido para o domínio. 

Alguma sugestão de como resolver isso?

Bruno Andrade

unread,
Aug 21, 2018, 10:45:23 AM8/21/18
to frevo-o...@googlegroups.com
Fala Porpino!

Pelo que entendi  seu dominio tem uma lista de documentos requeridos para uma matricula, um modelo poderia ser assim: 
class Enrolment
has_many :documents
has_many :documents_required, class_name: "DocumentRequired"
end

class Document
attrs :name, :required, :selected, :enrolment_id #coloquei só pra facilitar o entendimento
belongs_to :enrolment
end

def DocumentRequired
attrs :delivered

belongs_to :course
belongs_to :document

end

 Dessa forma poderia montar uma lista obrigatória por curso que pode ser modificada conforme o usuário, outra possibilidade é verificar se a matricula em questão já esta com todos os documentos exigidos.  obs: eu coloquei acima esboço bem rápido aqui qualquer duvida é só falar


Grande Abraço!

Bruno Andrade
@brunoandradd


--
Você recebeu essa mensagem porque está inscrito no grupo "Frevo on Rails" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para frevo-on-rail...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Gustavo Porpino

unread,
Aug 24, 2018, 8:56:19 PM8/24/18
to Frevo on Rails
Massa bruno, 

Gostei da tua sugestão, a bronca na verdade é como manter os requireds da matricula mesmo que o curso mude sua lista de requireds e mesmo que o usuário venha a alterar o nome do document por exemplo, saca? 

a lista de documents required da matricula, uma vez criada deve permanecer a mesma. Eu to quebrando os neorônios com isso kkk. acho que vou ter que voltar para as aulas de banco e normalização. uahuahuahauh 

Brunno Gomes

unread,
Aug 27, 2018, 3:08:48 PM8/27/18
to frevo-o...@googlegroups.com
Já precisei resolver algo parecido, então vou dar uma ideia:

Uma solução que tu pode adotar é ter uma tabela de configurações de documento, sendo cada configuração associada com um ou mais documentos e vice versa (HABTM). Dessa forma tu não vai ter a chave estrangeira de configuração em documento e caso os documentos necessários mudem, tu cria outro registro de configuração e associa com os novos (ou antigos) documentos necessários.

Assim uma matrícula quando fosse criada poderia ser associada a uma configuração específica (a configuração ativa no momento por exemplo, se a tua regra for essa) e assim saber quais são os documentos necessários. Quando uma nova configuração fosse criada, as matrículas já existentes continuariam associadas com a configuração anterior que já havia sido escolhida e continua guardada.

Tu também pode criar um conceito de "documento entregue", que faz a associação com o documento. Assim teu modelo de documento teria os atributos fixos e o documento entregue os atributos específicos da matrícula e os que são de documento mas podem mudar, como o nome (ao criar um documento entregue, copia o nome do documento a que ele se refere, caso esse nome de documento mude no futuro, o documento entregue continua com o nome antigo).

```
class Enrolment
  belongs_to :configuration
  has_many :handed_documents
end

class HandedDocument
  belongs_to :enrolment
  belongs_to :document
end

class Configuration
  has_and_belongs_to_many :documents
end

class Document
  has_and_belongs_to_many :configurations
end

configuration = Configuration.active
required_documents = configuration.documents
# [<Document id: 1>, <Document id: 2>, <Document id: 3>]

old_enrolment = Enrolment.find(1)
old_configuration = old_enrolment.configuration
old_required_documents = old_configuration.documents
# [<Document id: 1>, <Document id: 2>]
```

Brunno Gomes
+55 81 97115-0905


Reply all
Reply to author
Forward
0 new messages