Rails: belongs_to vs has_one
-
23-08-2019 - |
Pergunta
Um pouco de uma pergunta novato em associações trilhos.
Eu tenho um modelo Bug, e um modelo de Estado. Status é basicamente apenas uma tabela de pares de chave / valor. Fora das opções disponíveis, gostaria de dizer Estado Bug has_one faz mais sentido. No entanto, de acordo com a este
Conteúdo belongs_to ContentTemplate. Ir para trás e olhar em como eu descrevi a problema, e você verá que ele funciona. Com belongs_to, a mesa aceita responsabilidade para a chave estrangeira. então Conteúdo tem um content_template_id. E O ContentTemplate não precisa de nada. Eu possa apontar-lo à vontade. Feito.
Bug belongs_to Estado seria mais apropriado (desde Bug deve tomar a chave estrangeira). Semanticamente, o seu exemplo faz sentido, mas o meu faz nenhum. Este é apenas um capricho de trilhos, onde, nesta situação, parece estranho, ou sou eu não entender uma coisa / fazendo errado?
Solução
Sim, eu acho que você acabou de encontrar um cenário um pouco de aparência estranha em Rails. Suponho que poderia ser útil para visualizar "status" como uma espécie de categoria a que o bug pertence -. Em que a luz, faz sentido
Outras dicas
TABLE:
Bug
id integer
desc string
status_id integer fk
Status
id integer
desc string
RAILS MODEL:
Bug
belongs_to :status
Status
has_many :bugs
Você não explicou exatamente que tipo de relação entre Bug e status que você gostaria de ter, mas eu suponho que você está interessado em uma das seguintes opções:
- um-para-muitos: neste caso, não deve haver
has_many
na classe Bug ebelongs_to
na classe Status, - one-to-one:., Neste caso, não deve haver
has_one
na classe Bug ebelongs_to
na classe Estado
Em ambos os casos Status contém a chave estrangeira. No segundo caso, a formulação é um pouco estranho, devido ao fato de que a relação de um-para-um é, de facto, assimétrica (deve haver um FK apenas de um lado).
Se o Status é apenas um / table key-value look-up, parece que você pode querer um relação habtm (has_and_belongs_to_many
) entre o estado e erro. Com habtm, o que você vai acabar com é um bugs_statuses
juntar a tabela que tem bug_id
e status_id
colunas, juntamente com os seus erros e status tabelas.