繁体   English   中英

Rails has_many belongs_to foreign_key primary_key混淆

[英]Rails has_many belongs_to foreign_key primary_key confusion

我无法使用id字段设置我的表作为primary_id(我的意思是他们在那里,但他们对业务没有任何意义)。 即销售和客户表都来自我们的Microsoft SQL数据库。

在Sales表中,我有一个名为'customer_id'的字段,该字段与customers表中的'customer_id'(不是'id'字段)相匹配。 我的'customer_id'字段数据类型设置为整数,但在迁移中我从未指定它们是否是键。 我只将它们编入索引。

销售属于客户,客户有很多销售,所以我试图建立has_many和belongs_to关联。

sale.rb

class Sale < ActiveRecord::Base

    belongs_to :customer, primary_key: "customer_id", foreign_key: "customer_id"

end

customer.rb

class Customer < ActiveRecord::Base

    has_many :sales


end

但是,当我获得rails控制台并尝试测试它时,我无法对customer_id进行SQL搜索,只搜索customers表中的id。

rails console

    2.0.0-p353 :001 > c = Customer.find_by_customer_id(400123)
  Customer Load (2.0ms)  SELECT "customers".* FROM "customers" 
WHERE "customers"."customer_id" = 400123 LIMIT 1
 => #<Customer id: 16271, customer_id: 400123, customer_name: "ABC", 
customer_street: "ABC", customer_suburb: "ABC", customer_state: "ABC",
customer_postcode: "ABC", dispatch_location_price_list: "ABC", customer_selling_price_list: 
"ABC", customer_status: "ABC", line_of_business_id: "ABC", line_of_business: "ABC", 
market_segment_id: "ABC", market_segment_name: "Other", customer_rep_id: 123, customer_rep_name: "ABC"

2.0.0-p353 :002 > c.sales
  Sale Load (7.1ms)  **SELECT "sales".* FROM "sales" 
WHERE "sales"."customer_id" = $1      [["customer_id", 16271]]**
 => #<ActiveRecord::Associations::CollectionProxy []> 

具体来说,我只想说最后一点[[“customer_id',400123]]。

我知道这可能是显而易见的,但是我仍然在学习很多这些东西需要花一点时间(很多情况下,我已经回答了我的问题,只是通过询问但今晚不是这样)。 任何建议将不胜感激。

在我的研究中,我在API中发现了这一点

4.2.2.7:primary_key

按照惯例,Rails假定用于保存此模型的主键的列是id。 您可以覆盖它并使用:primary_key选项显式指定主键。

这让我觉得我应该使用primary_key作为'id'字段不是要查找的字段。

我也读过这个帖子,但我认为这可能与我的情况有点不同。

您是否尝试将self.primary_key = :customer_id添加到Customer模型?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM