カスタムclass_nameを使用してbelonds_to rails3で適切な外部キーを生成しない

StackOverflow https://stackoverflow.com/questions/3045863

質問

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」をデフォルトとして使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top