принадлежит_то с пользовательским классом_name, не производимый надлежащим внешним ключом в Rails 3

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

Вопрос

Я обновляю заявку на Rails 3, и у меня возникли проблемы с созданием пользовательского внешнего ключа. У меня есть что-то подобное:

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

Вид:

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

Я получаю эту ошибку в моем журнале Rails:

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

Это должно увидеть belongs_to :owner и искать внешний ключ под названием owner_id. Отказ Я даже пробовал явно установленную внешний ключ, и это не работает. Я также проверил маяк для возможных рельсов 3 ошибки, но не повезло.

Это было полезно?

Решение

Вам нужно указать внешний ключ на has_many :products ассоциация, она не автоматически не знает, что это отражает belongs_to :owner.

Это должно работать:

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

С рельсов Документы:

:внешний ключ

Укажите внешний ключ, используемый для ассоциации. По умолчанию это угадается, чтобы быть названием этого класса в строчных и «_id» суффиксации. Таким образом, класс человека, который делает ассоциацию HAS_MANY, будет использовать «Person_id» по умолчанию: Entertain_key ..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top