我在 Ruby on Rails 应用程序中有三个模型:
- 杂志
- 产品
- 页
我想使用这个查询:
Magazine.find(1).products.first.pages
并获得与适当产品关联的页面,但在页面模型中我不想product_id
成为我的外键,我想number_id
成为我的外键。number 是产品表中的一个字段。如何更改外键?因为 railsproduct_id
用作页表的外键。tnx 为您提供帮助。
我在 Ruby on Rails 应用程序中有三个模型:
我想使用这个查询:
Magazine.find(1).products.first.pages
并获得与适当产品关联的页面,但在页面模型中我不想product_id
成为我的外键,我想number_id
成为我的外键。number 是产品表中的一个字段。如何更改外键?因为 railsproduct_id
用作页表的外键。tnx 为您提供帮助。
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" 或您的主键是什么。
我将为您的模型编写适当的代码。
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
它会返回正确的结果。