2010-06-15 5 views
6

Ich aktualisiere eine Anwendung auf Rails 3 und habe Probleme beim Erstellen eines benutzerdefinierten Fremdschlüssels. Ich habe so etwas wie dies:orders_to mit einem benutzerdefinierten Klassenname, der in Rails 3 keinen korrekten Fremdschlüssel erzeugt

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 

Aussicht:

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

ich diesen Fehler in meiner 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 suchen Sie nach einem Fremdschlüssel sehen genannt owner_id. Ich habe sogar versucht, den Fremdschlüssel explizit zu setzen, und das funktioniert nicht. Ich überprüfte auch den Leuchtturm auf einen möglichen Rails 3 Bug, aber kein Glück.

Antwort

15

Sie müssen den Fremdschlüssel auf der has_many :products Zuordnung angeben, es weiß nicht automatisch, dass es die belongs_to :owner widerspiegelt.

sollte diese Arbeit:

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

Von den Schienen docs:

: foreign_key

den Fremdschlüssel für den Verein verwendet angeben. Standardmäßig wird angenommen, dass dies der Name dieser Klasse in Kleinbuchstaben und "_id" Suffix ist. So eine Person-Klasse, die ein has_many Verein macht, wird verwenden „person_id“ als Standard : foreign_key ..

+0

dies funktioniert, aber ich denke, es ist ein wenig seltsam, dass ich es nicht zu tun hatte mit meiner Rails 2 Apps nicht sicher, dass es als ein Fehler – Tony

+0

Es sollte das gleiche in Rails 2 sein. :) – elektronaut

+0

Ich habe zwei Spalten in meiner Tabelle, die die Benutzer-Tabelle verweisen. Weißt du, wie ich die Referenz einrichten würde? Ich kann nicht einfach owner_id wie oben vorgeschlagen sagen, da ich Owner und SubmittingUser benötige. Vielen Dank! – skaz

Verwandte Themen