belongs_to с пользовательским class_name, не производящим надлежащий внешний ключ в направляющих 3

Я обновляю приложение к направляющим 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 ошибки, но никакая удача.

5
задан Tony 15 June 2010 в 14:01
поделиться

1 ответ

Вам необходимо указать внешний ключ в ассоциации 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 ..

14
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: