0

我無法設置我的表使用ID字段作爲primary_id(我的意思是他們在那裏,但他們並不意味着什麼業務)。即銷售表和客戶表都來自我們的Microsoft SQL數據庫。Rails has_many belongs_to foreign_key primary_key混淆

在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 

然而,當我得到的鐵軌控制檯,並嘗試測試這個我不能擁有的CUSTOMER_ID的SQL查詢,只有搜索客戶表中的ID。

軌控制檯

2.0.0-p353 :001 > c = Customer.find_by_customer_id(400123) 
    Customer Load (2.0ms) SELECT "customers".* FROM "customers" 
WHERE "customers"."customer_id" = 40LIMIT 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]。

我知道這可能是顯而易見的,但因爲我仍然在學習了很多這些東西需要一點點沉入(很多情況下,我只是通過問它回答我的問題,但不是那麼晚)任何建議,將不勝感激

在我的研究中,我發現this在API中:

4.2.2.7:primary_key

按照慣例,Rails的假設用於保存該模型的主要 鍵的列是ID。您可以覆蓋此選項,並使用:primary_key選項明確指定主關鍵字 。

這讓我覺得我應該使用primary_key作爲'id'字段不是要查找的字段。

我也讀this thread但我認爲它可能會有點不同於我的情況。

回答

2

您是否試圖將self.primary_key = :customer_id添加到Customer型號?

+0

沒有。我會試一試。將不得不在睡眠後。我會讓你知道我是怎麼走的。感謝您的建議。 –

+0

熱潮!那很快。你先生真棒。我已經看到了使用自我的方法。但不知道你可以這樣做來指定主鍵。這對我有很大的幫助,因爲我所有的表都具有從MS SQL中獲取的限制。 –

+0

歡迎您!祝你好運! –