belongs_to con un nome_classe personalizzato non produrre una corretta chiave esterna in Rails 3

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

Domanda

sto aggiornando un'applicazione per Rails 3 e sto avendo problemi a creare una chiave esterna personalizzato. Ho qualcosa di simile:

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

Il punto di vista:

<%- @products.each do |p| -%>
    <%= p.created_at %><br />
<%- end -%>

ottengo questo errore nel mio ceppo Rails:

Mysql::Error: Unknown column 'products.user_id' in 'where clause': SELECT     `products`.* FROM       `products` WHERE     (`products`.user_id = 1)

Si dovrebbe vedere la belongs_to :owner e cercare una chiave esterna chiamato owner_id. Ho anche provato a installare in modo esplicito la chiave esterna e che non funziona. Ho anche controllato il faro di un possibili Rails 3 di bug, ma senza fortuna.

È stato utile?

Soluzione

È necessario specificare la chiave esterna sull'associazione has_many :products, non automagicamente sa che rispecchia il belongs_to :owner.

Questo dovrebbe funzionare:

class User < ActiveRecord::Base
  has_many :products, :foreign_key => 'owner_id'
...
end

dalle rotaie docs:

  

: foreign_key

     

Specifica la chiave esterna   utilizzato per l'associazione. Per impostazione predefinita   questo è indovinato per essere il nome di questo   di classe in minuscolo e "_id"   suffisso. Quindi una classe Person che rende   un'associazione has_many userà   "Person_id" come default   : Foreign_key ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top