belongs_to con un class_name personalizado no productoras de clave externa adecuada en Rails 3

StackOverflow https://stackoverflow.com/questions/3045863

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.

¿Fue útil?

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 ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top