0

Ruby on Rails アプリケーションに 3 つのモデルがあります。

  1. 雑誌
  2. 製品
  3. ページ

このクエリを使用したい:

Magazine.find(1).products.first.pages

適切な製品に関連付けられたページを取得しますが、ページモデルでは、外部キーになりたくありません。product_id外部キーになりたいですnumber_id。number は製品テーブルのフィールドです。どのように外部キーを変更できますか? レールproduct_idはページテーブルの外部キーとして機能するためです。あなたの助けのためのtnx。

4

3 に答える 3

1

あなたのモデルに適したコードを書きます。

class Magazine < ActiveRecord::Base
  has_many :products
  has_many :pages, :through => :products
end


class Product < ActiveRecord::Base
  set_primary_key "number"
  belongs_to :magazine
  has_many :pages, foreign_key: "product_number"

  def my_pages
    self.pages.find_all { |p| p.magazine_id == self.magazine_id}
  end  
end

class Page < ActiveRecord::Base
end

Magazine.first.products.first.my_pages を呼び出すことができます

そしてそれは正しい結果を返します。

于 2013-01-11T22:23:23.673 に答える
1

API ドキュメントにはすべての答えがあります。#has_manyのオプションを参照してください。おそらく、次のように関係を指定する必要があります。

class Page < ActiveRecord::Base
  belongs_to :product, foreign_key: "number_id"
end

class Product < ActiveRecord::Base
  has_many :pages
end

あなたの質問からは完全にはわかりませんが、製品テーブルの主キーが :id でない場合は、 primary_key: "number" または主キーが何であれ指定する必要があります。

于 2013-01-11T21:19:43.877 に答える
0

使用する外部キーを指定できます。http: //guides.rubyonrails.org/association_basics.html#belongs_to-foreign_keyを参照してください。

于 2013-01-11T21:17:50.993 に答える