¿Cómo establece automáticamente la clave externa en un nuevo objeto de una relación ActiveRecord si los nombres de clase no coinciden?
Frecuentes
Visto 53 equipos
1
La siguiente clase es una subclase de Quote que usa herencia de tabla única.
class BuyQuote < Quote
has_many :shipment_quotes, foreign_key: :quote_id
has_many :shipments, through: :shipment_quotes
end
Me gustaría crear un envío usando el ActiveRecord estándar new
método.
quote = BuyQuote.create
shipment = quote.shipments.new
Pero, la relación no se está estableciendo entre el shipment
y quote
. Supongo que esto se debe a que el nombre de la clase es diferente al esperado, pero no estoy seguro.
¿Cómo puedo modificar la relación ActiveRecord para que esto funcione?
1 Respuestas
1
Parece que tiene algunos errores de sintaxis en su código publicado y posiblemente un nombre de tabla incorrecto. Si la tabla de búsqueda no necesita ningún atributo adicional (aparte de relacionar el envío con la cotización), simplemente usaría la relación simplista has_and_belongs_to_many. Esto depende de si planea tener un envío asociado con más de una cotización.
class BuyQuote < Quote
has_many :shipments_quotes, :foreign_key => :quote_id
has_many :shipments, :through => :shipments_quotes
end
o con relación habtm:
class BuyQuote < Quote
has_and_belongs_to_many :shipments, :foreign_key => :quote_id
end
Otro problema podría deberse a que está instanciando una clase de cotización, para la cual no muestra la definición. Parece que está definiendo la relación de "envíos" para la clase BuyQuote, pero no para la clase principal Quote.
Tal vez intente:
quote = BuyQuote.create
shipment = quote.shipments.new
Respondido 24 ago 12, 21:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails ruby or haz tu propia pregunta.
Derecha. debería haber escrito
BuyQuote.new
. Eso fue solo un error en la pregunta. Pero, no parece importar si defino la relación ashipments
en la superclase o no. - apenas conocido