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'
...
endRun Code Online (Sandbox Code Playgroud)
来自rails docs:
:foreign_key
指定用于关联的外键.默认情况下,这被认为是小写的这个类的名称和后缀"_id".因此,创建has_many关联的Person类将使用"person_id"作为默认值:foreign_key ..