pertence_to com um classe personalizado, não produzindo a chave estrangeira adequada no Rails 3
-
27-09-2019 - |
Pergunta
Estou atualizando um aplicativo para o Rails 3 e estou tendo problemas para criar uma chave estrangeira personalizada. Eu tenho algo assim:
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
A vista:
<%- @products.each do |p| -%>
<%= p.created_at %><br />
<%- end -%>
Eu recebo esse erro no meu registro de trilhos:
Mysql::Error: Unknown column 'products.user_id' in 'where clause': SELECT `products`.* FROM `products` WHERE (`products`.user_id = 1)
Deve ver o belongs_to :owner
e procure uma chave estrangeira chamada owner_id
. Eu até tentei definir explicitamente a chave estrangeira e isso não funciona. Também verifiquei o Lighthouse para obter um possível bug Rails 3, mas sem sorte.
Solução
Você precisa especificar a chave estrangeira no has_many :products
associação, não sabe automaticamente que reflete o belongs_to :owner
.
Isso deve funcionar:
class User < ActiveRecord::Base
has_many :products, :foreign_key => 'owner_id'
...
end
Dos documentos do Rails:
: Foreign_key
Especifique a chave estrangeira usada para a associação. Por padrão, isso é adivinhado como o nome desta classe em casos mais baixos e "_id" sufixo. Portanto, uma classe de pessoa que faz uma associação Has_Many usará "Person_id" como padrão: Foreign_key ..