有一个customer
表格,其中列id
,name
和email
以及列address
id
表,{ {1}},street
,code
。
在SQL中,我使用:
加入两者customer_id
在Rails中我建模了:
SELECT c.id, c.name, c.email, a.street, a.code FROM customer AS c, address AS a WHERE a.customer_id = c.id;
在我试过的控制器中:
class Address < ActiveRecord::Base
self.table_name = 'address'
end
class Customer < ActiveRecord::Base
self.table_name = 'customer'
has_one :address
end
=&gt; Customer.joins(:address)
SELECT customer.* FROM customer INNER JOIN address ON address.customer_id = customer.id
=&gt; Customer.includes(:address)
但两者都不会返回预期的结果。
如何获得与第一个SQL查询中定义的结果相同的结果或者执行此操作的正确方法?
答案 0 :(得分:1)
这不是那种方式,但是我知道你来自哪里,在完成了大量的数据库工作后学习了Rails。运行控制台来测试这些想法。首先,地址正确地“归属于”客户。客户“has_one”地址。这些在模型中定义。将模型视为数据库表。外键由您指定的这些关系定义。连接由关系解释。
因此,在控制台中,创建一个地址。
> Address.create(:street => "123 Main")
输出将显示新地址的ID。创建客户记录,并在address_id列中输入地址的ID。
Customer.create(:address_id=> [ new address id ] )
查询客户:
> customer = Customer.find([id number])
然后,输入
> customer.address
它应该显示地址。没有必要加入(但它们正在服务器上发生)。
而且,您无需在模型中指定表名。