在Rails中加入不相关的表

时间:2015-04-17 19:30:45

标签: sql ruby-on-rails ruby oracle

底线 - 我想将两个数据库表连接在一起,“属于”彼此,但有一个共同的字段。

经过对StackOverflow的一些研究后,我找到了一些解决类似问题的解决方案,这些问题直接使用SQL,如下所示:

Address.joins('INNER JOIN phones on addresses.person_id = phones.person_id').select("addresses.*, phones.*").limit(1)

但是,当我在rails控制台中使用上述语句时,它会执行以下SQL查询:

Address Load (0.3ms)  SELECT  addresses.*, phones.* FROM `addresses` INNER JOIN phones on addresses.person_id = phones.person_id LIMIT 1

并返回以下数据(因隐私原因而被审查):

=> #<ActiveRecord::Relation [#<Address id: 0001, created_at: "YYYY-MM-DD hh:mm:ss", updated_at: "YYYY-MM-DD hh:mm:ss", description: nil, line1: "123 Evergreen Terrace", line2: "", line3: "", city: "Springfield", state: "IL", country: "USA", zip: "11111", building_number: "001", person_id: 1, address_type: "Home", primary: false, show: nil, job_id: nil, room_number: "001", source: "HR", effective_date: "YYYY-MM-DD">]>

Phone表中没有一个字段成为最终记录。

我是否必须使这些不相关的表格“相互”以使它们起作用?喜欢 -

class Address < ActiveRecord::Base
  belongs_to :person
end

class Phone < ActiveRecord::Base
  belongs_to :person
  belongs_to :address
end

或者我可以在不修改模特关系的情况下做我想做的事情吗?

1 个答案:

答案 0 :(得分:3)

数据可能在查询中不可见,但记录将响应查询提取的那些字段,例如,如果电话记录具有number属性,则调用{{ 1}}将使用提取的数字

进行响应
.number