Rails has_many belongs_to foreign_key primary_key混淆

时间:2014-02-17 11:37:21

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord model-associations

我无法使用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中找到了this

  

4.2.2.7:primary_key

     

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

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

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

1 个答案:

答案 0 :(得分:2)

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