belongs_to avec un nom_classe personnalisé ne produisant pas une bonne clé étrangère dans Rails 3

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

Question

Je suis mise à jour d'une application Rails 3 et je vais avoir du mal à créer une coutume clé étrangère. J'ai quelque chose comme ceci:

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

La vue:

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

je reçois cette erreur dans mon journal Rails:

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

Il faut voir le belongs_to :owner et l'apparence d'une clé étrangère appelée owner_id. J'ai même tenté de mettre explicitement la clé étrangère et qui ne fonctionne pas. J'ai aussi vérifié le phare pour un possible Rails 3 bug mais pas de chance.

Était-ce utile?

La solution

Vous devez spécifier la clé étrangère sur l'association has_many :products, il ne sait pas automagiquement qu'il reflète le belongs_to :owner.

Cela devrait fonctionner:

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

A partir de rails docs:

  

: foreign_key

     

Indiquez la clé étrangère   utilisé pour l'association. Par défaut   cela est devinait le nom de cette   classe en minuscules et « _id »   suffixé. Ainsi, une classe personne qui fait   une association has_many utilisera   « Person_id » par défaut   : Foreign_key ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top