Я обновляю приложение к направляющим 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 -%>
Я получаю эту ошибку в своем журнале направляющих:
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
, она автоматически не знает, что является зеркалом own_to: owner
.
Это должно работать:
class User < ActiveRecord::Base
has_many :products, :foreign_key => 'owner_id'
...
end
Из документации rails:
: foreign_key
Укажите внешний ключ используется для ассоциации. По умолчанию предполагается, что это название этого класс в нижнем регистре и "_id" с суффиксом. Итак, класс Person, который делает ассоциация has_many будет использовать "person_id" по умолчанию : foreign_key ..