through references rails many has_one has_many has_and_belongs_to_many has example belongs and ruby-on-rails model associations has-many belongs-to

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 y belongs_to en la clase Status,
  • one-to-one: en este caso debería haber has_one en la clase Bug y belongs_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