belongs_to mit einem benutzerdefinierten class_name richtigen Fremdschlüssel in Rails nicht produzieren 3

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

Frage

Ich bin Aktualisierung eine Anwendung auf Rails 3 und Ich haben Probleme, einen benutzerdefinierten Fremdschlüssel zu erstellen. Ich habe so etwas wie folgt aus:

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

Die Aussicht:

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

ich diesen Fehler in meinem Rails log:

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

Es sollte die belongs_to :owner und sucht nach einem Fremdschlüssel genannt owner_id sehen. Ich habe sogar versucht explizit den Fremdschlüssel Einstellung und das nicht funktioniert. Ich habe auch Leuchtturm für eine mögliche Rails 3 Fehler, aber kein Glück.

War es hilfreich?

Lösung

Sie müssen den Fremdschlüssel auf dem has_many :products Verein angeben, ist es nicht automatisch weiß, dass es spiegelt die belongs_to :owner.

Dies sollte funktionieren:

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

Von den Schienen docs:

  

: foreign_key

     

Geben Sie den Fremdschlüssel   für den Verein eingesetzt. Standardmäßig   dies ist der Name ahnen davon zu sein   Klasse in Kleinbuchstaben und „_id“   suffixed. So eine Person-Klasse, die Marken   ein has_many Verein wird verwenden   „Person_id“ als Standard   : Foreign_key ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top