ruby on rails - references - Rieles: belongs_to vs has_one
rails has_one through (4)
No explicó exactamente qué tipo de relación entre Bug y Status le gustaría obtener, pero supongo que está interesado en uno de los siguientes:
- uno-a-muchos: en este caso debería haber
has_many
en la clase Bug ybelongs_to
en la clase Status, - one-to-one: en este caso debería haber
has_one
en la clase Bug ybelongs_to
en la clase Status.
En ambos casos, el estado contiene la clave externa. En el segundo caso, la redacción es un poco extraña, debido al hecho de que la relación de uno a uno es, de hecho, asimétrica (debe haber un FK solo en un lado).
Una pequeña pregunta de novato sobre asociaciones de rieles.
Tengo un modelo de Bug y un modelo de estado. El estado es básicamente una tabla de pares clave / valor. De las opciones disponibles, diría que Bug tiene un estado. El estado tiene más sentido. Sin embargo, de acuerdo con this
El contenido pertenece a ContentTemplate. Vuelve y mira cómo describí el problema, y verás que funciona. Con belongs_to, la tabla acepta la responsabilidad de la clave externa. Entonces, Content tiene un content_template_id. Y ContentTemplate no necesita nada. Puedo señalarlo a voluntad. Hecho.
El error belongs_to Status sería más apropiado (ya que Bug debería tomar la clave foránea). Semánticamente, su ejemplo tiene sentido, pero el mío no tiene ninguno. ¿Es esto solo un capricho de los raíles donde en esta situación parece extraño, o no estoy entendiendo algo / lo estoy haciendo mal?
Sí, creo que acabas de encontrar un escenario un poco extraño en Rails. Supongo que podría ser útil ver el "estado" como una especie de categoría a la que pertenece el error, en ese sentido, tiene sentido.
Si Status es solo una tabla de búsqueda / valor-clave, parece que es posible que desee una relación habtm ( has_and_belongs_to_many
) entre Status y Bug. Con habtm, lo que acabará siendo es una tabla de unión bugs_statuses
que tiene columnas bug_id
y status_id
junto con sus tablas de errores y estados.
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