I'm working with a legacy database that gives the following schema for the tables product
and familia_producto
(rake db:schema:dump
)
create_table "producto", primary_key: "barcode", force: true do |t| t.string "codigo_corto", limit: 16, null: false t.string "marca", limit: 35 t.string "descripcion", limit: 50 t.string "contenido", limit: 10 t.string "unidad", limit: 10 t.float "stock", default: 0.0 t.float "precio" t.float "precio_neto" t.float "costo_promedio" t.float "fifo" t.float "vendidos" t.boolean "aplica_iva" t.integer "otros_impuestos", limit: 2 t.integer "familia", limit: 2, default: 1, null: false t.integer "id_tipo_producto", limit: 2, null: false t.boolean "es_perecible" t.float "dias_stock", default: 1.0 t.float "margen_promedio", default: 0.0 t.boolean "es_venta_fraccionada" t.float "stock_pro", default: 0.0 t.float "tasa_canje", default: 1.0 t.float "precio_mayor" t.float "cantidad_mayor" t.boolean "es_mayorista" t.boolean "estado" t.boolean "precio_editable" end create_table "familia_producto", force: true do |t| t.string "nombre", limit: 32, null: false end
In the models I've this
class FamiliaProducto < ActiveRecord::Base self.table_name = 'familia_producto' has_many :productos, :class_name => 'Producto', :primary_key => 'barcode', :foreign_key => 'familia' end class Producto < ActiveRecord::Base self.table_name = 'producto' belongs_to :familia_producto, :class_name => 'FamiliaProducto' end
But when I call the .familia
the producto object throws me a number, not the FamiliaProducto
object.
2.1.0 :012 > p = Producto.all[0] Producto Load (1.7ms) SELECT "producto".* FROM "producto" => #<Product...... 2.1.0 :013 > p.familia => 2
That 2
should be the FamiliaProducto
object.
You must use the name of the association, also need to add the foreign key to the belongs_to
# Returns a FamiliaProducto object p = Producto.first p.familia_producto # Producto model belongs_to :familia_producto, class_name: 'FamiliaProducto', foreign_key: 'familia' # FamiliaProducto model has_many :productos, class_name: 'Producto', foreign_key: 'familia' # Returns an integer p = Producto.first p.familia
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With