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

时间:2010-06-15 14:01:33

标签: ruby-on-rails activerecord 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

观点:

<%- @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 个答案:

答案 0 :(得分:15)

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

这应该有效:

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

来自rails docs:

  

<强>:foreign_key

     

指定外键   用于协会。默认情况下   这被猜测是这个的名字   小写的类和“_id”   后缀。所以是一个Person类   一个has_many协会将使用   “person_id”为默认值   :foreign_key ..