カスタムclass_nameを使用してbelonds_to rails3で適切な外部キーを生成しない
-
27-09-2019 - |
質問
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
. 。私は外部キーを明示的に設定しようとしましたが、それは機能しません。また、灯台に可能なレール3のバグをチェックしましたが、運はありませんでした。
解決
外部キーを指定する必要があります has_many :products
関連性、それはそれが反映していることを自動的に知らない belongs_to :owner
.
これは機能するはずです:
class User < ActiveRecord::Base
has_many :products, :foreign_key => 'owner_id'
...
end
Railsドキュメントから:
:外部キー
協会に使用される外部キーを指定します。デフォルトでは、これは低ケースでこのクラスの名前であると推測され、「_id」の接尾辞があります。したがって、has_many Associationを作成する人のクラスは、「person_id」をデフォルトとして使用します。
所属していません StackOverflow