Rieles:pertenece_a vs tiene_uno
-
23-08-2019 - |
Pregunta
Una pregunta un poco para novatos sobre las asociaciones ferroviarias.
Tengo un modelo Bug y un modelo Status.El estado es básicamente una tabla de pares clave/valor.De las opciones disponibles, diría que Bug has_one Status tiene más sentido.Sin embargo, según este
El contenido pertenece_a ContentTemplate.Regrese y mira cómo describí el problema, y verá que funciona.Con belongs_to, la tabla acepta responsabilidad de la clave externa.Así que El contenido tiene un content_template_id.Y ContentTemplate no necesita nada.Puedo señalarlo a voluntad.Hecho.
El error pertenece_al estado sería más apropiado (ya que el error debería tomar la clave externa).Semánticamente, su ejemplo tiene sentido, pero el mío no.¿Es esto solo una peculiaridad de los rieles que en esta situación parece extraño, o no entiendo algo o no lo estoy haciendo mal?
Solución
Sí, creo que se acaba de encontrar un escenario poco extraño de aspecto en Rails. Supongo que podría ser útil para ver "estado" como una especie de categoría a la que pertenece el error - en el que la luz, tiene sentido
.Otros consejos
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
no explicó con precisión qué tipo de relación entre el insecto y el estado que le gustaría conseguir, pero supongo que está interesado en uno de los siguientes:
- -uno-a-muchos: en este caso no debe
has_many
en clase Bug ybelongs_to
en la clase de estado, - uno-a-uno:. En este caso no se debe
has_one
en clase Bug ybelongs_to
en la clase de estado
En ambos casos de estado contiene la clave externa. En el segundo caso, la formulación es un poco extraño, debido al hecho de que uno-a-uno relación es de hecho asimétrica (debe haber un FK en un solo lado).
Si el estado es sólo una tabla de consulta / clave-valor, parece que es posible que desee un HABTM relación (has_and_belongs_to_many
) entre Estado e insecto. Con HABTM, lo que va a terminar con un bugs_statuses
es unirse tabla que tiene columnas bug_id
y status_id
junto con sus errores y estados de tablas.