serve_to с пользовательским именем класса, не производящим правильный внешний ключ в Rails 3 - PullRequest
6 голосов
/ 15 июня 2010

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

1 Ответ

15 голосов
/ 15 июня 2010

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

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

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

Отрельсы документы:

: Foreign_key

Укажите внешний ключ, используемый для ассоциации.По умолчанию это имя этого класса в нижнем регистре и суффикс "_id".Поэтому класс Person, который создает ассоциацию has_many, будет использовать "person_id" по умолчанию: foreign_key ..

...