belongs_to mit einem benutzerdefinierten class_name richtigen Fremdschlüssel in Rails nicht produzieren 3
-
27-09-2019 - |
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.
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 ..