0

我在 Ruby on Rails 应用程序中有三个模型:

  1. 杂志
  2. 产品

我想使用这个查询:

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

并获得与适当产品关联的页面,但在页面模型中我不想product_id成为我的外键,我想number_id成为我的外键。number 是产品表中的一个字段。如何更改外键?因为 railsproduct_id用作页表的外键。tnx 为您提供帮助。

4

3 回答 3

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 回答
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 回答
0

您可以指定要使用的外键,请参见http://guides.rubyonrails.org/association_basics.html#belongs_to-foreign_key

于 2013-01-11T21:17:50.993 回答