带有自定义列名的 Rails 的所属关系 [英] Rails belongs_to with custom column name

查看:41
本文介绍了带有自定义列名的 Rails 的所属关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用旧数据库,该数据库为表 productfamilia_producto (rake db:schema:dump)

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

在模型中我有这个

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

但是当我调用 .familia 时,producto 对象向我抛出一个数字,而不是 FamiliaProducto 对象.

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 

那个 2 应该是 FamiliaProducto 对象.

That 2 should be the FamiliaProducto object.

推荐答案

必须使用关联名称,还需要在belongs_to

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

这篇关于带有自定义列名的 Rails 的所属关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆