我无法使用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,但我认为这可能与我的情况有点不同。
答案 0 :(得分:2)
您是否尝试将self.primary_key = :customer_id
添加到Customer
型号?