belongs_to con un class_name personalizado no productoras de clave externa adecuada en Rails 3
-
27-09-2019 - |
Pregunta
Estoy actualizando una aplicación de Rails 3 y estoy teniendo problemas para crear una clave externa personalizado. Tengo algo como esto:
class Product < ActiveRecord::Base
belongs_to :owner, :class_name => 'User'
...
end
class User < ActiveRecord::Base
has_many :products
...
end
class ProductsController < ApplicationController
before_filter :authenticate_user!
def index
@products = current_user.products
end
end
La vista:
<%- @products.each do |p| -%>
<%= p.created_at %><br />
<%- end -%>
Me sale este error en mi registro Rieles:
Mysql::Error: Unknown column 'products.user_id' in 'where clause': SELECT `products`.* FROM `products` WHERE (`products`.user_id = 1)
Debe ver el belongs_to :owner
y el aspecto de una clave externa llamada owner_id
. Incluso he intentado establecer explícitamente la clave externa y que no funciona. También comprobé faro para un posible Carriles 3 errores, pero sin suerte.
Solución
Es necesario especificar la clave externa de la asociación has_many :products
, no automágicamente saben que los espejos del belongs_to :owner
.
Esto debería funcionar:
class User < ActiveRecord::Base
has_many :products, :foreign_key => 'owner_id'
...
end
A partir de los rieles de documentos:
foreign_key
Especifica la clave externa utilizado para la asociación. Por defecto esto se supuso ser el nombre de este clase en minúsculas y "_id" sufijo. Así que una clase de persona que hace que una asociación has_many utilizará "Person_id" como predeterminado : Foreign_key ..