【发布时间】:2017-04-10 01:48:10
【问题描述】:
我正在尝试创建一个非常复杂的查询,但遇到了麻烦 - 所以我要回到基础来尝试找出我缺少的东西。
我一直在阅读Rails Guides 的Active Record Associations 和Active Record Query Interface(特别是section 12 - 连接),但我无法理解它们之间的关系以及为什么需要连接/包含。
关联页面显示“使用 Active Record 关联,我们可以通过声明性地告诉 Rails 两个模型之间存在连接来简化这些操作以及其他操作。”查询页面的第 12.2 节说“Active Record 允许您使用模型上定义的关联名称作为在使用 joins 方法时为这些关联指定 JOIN 子句的快捷方式。”
在我看来,这两种说法有些矛盾。如果我创建为 belongs_to 关联,如果我试图从两个表中提取数据,为什么需要加入?换个角度看:
class Customer < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :customer
end
如果我执行@orders = Order.all,我可以通过执行@orders.first.customer.name 来输出客户名称。但是,如果我想选择名称中带有“smith”的所有订单,我会执行类似@orders=Order.where('customer.name ilike "%smith%"').joins(:customer)
这种“关系”是怎么上半场起作用的,下半场却需要加入?
【问题讨论】:
标签: sql ruby-on-rails postgresql ruby-on-rails-4 activerecord