我無法設置我的表使用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但我認爲它可能會有點不同於我的情況。
沒有。我會試一試。將不得不在睡眠後。我會讓你知道我是怎麼走的。感謝您的建議。 –
熱潮!那很快。你先生真棒。我已經看到了使用自我的方法。但不知道你可以這樣做來指定主鍵。這對我有很大的幫助,因爲我所有的表都具有從MS SQL中獲取的限制。 –
歡迎您!祝你好運! –