我正在将应用程序更新到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错误,但没有运气。
答案 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 ..