【发布时间】:2014-02-17 11:37:21
【问题描述】:
我无法使用 id 字段作为 primary_id 设置我的表(我的意思是它们在那里,但它们对业务没有任何意义)。即 sales 和 customer 表都来自我们的 Microsoft SQL 数据库。
在销售表中,我有一个名为“customer_id”的字段,它与客户表中的“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
客户.rb
class Customer < ActiveRecord::Base
has_many :sales
end
但是,当我得到 rails 控制台并尝试对此进行测试时,我无法通过 SQL 搜索 customer_id,只搜索 customers 表中的 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" = 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,但我认为这可能与我的情况有点不同。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord model-associations