pertence_to com um classe personalizado, não produzindo a chave estrangeira adequada no Rails 3

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

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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top