belongs_to,自定义class_name不在Rails 3中生成正确的外键

Ton*_*ony 5 activerecord ruby-on-rails belongs-to

我正在更新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
Run Code Online (Sandbox Code Playgroud)

风景:

<%- @products.each do |p| -%>
    <%= p.created_at %><br />
<%- end -%>
Run Code Online (Sandbox Code Playgroud)

我在Rails日志中收到此错误:

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

它应该看到belongs_to :owner并查找一个名为的外键owner_id.我甚至尝试显式设置外键,但这不起作用.我还检查了灯塔的可能Rails 3错误,但没有运气.

ele*_*aut 14

您需要在has_many :products关联上指定外键,它不会自动知道它反映了该关键字belongs_to :owner.

这应该工作:

class User < ActiveRecord::Base
  has_many :products, :foreign_key => 'owner_id'
...
end
Run Code Online (Sandbox Code Playgroud)

来自rails docs:

:foreign_key

指定用于关联的外键.默认情况下,这被认为是小写的这个类的名称和后缀"_id".因此,创建has_many关联的Person类将使用"person_id"作为默认值:foreign_key ..