принадлежит_то с пользовательским классом_name, не производимый надлежащим внешним ключом в Rails 3
-
27-09-2019 - |
Вопрос
Я обновляю заявку на 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 ..