Dav*_*ave 3 finder scope ruby-on-rails left-join ruby-on-rails-6
I\xe2\x80\x99m 使用 Rails 6.1.4.4。我这个模型有一个 has_many
\nclass MyObject < ApplicationRecord\n\n has_many :products, inverse_of: :application, as: :item\nRun Code Online (Sandbox Code Playgroud)\n如何编写执行左外连接并在 LEFT-OUTER-JOIN-ON 子句中添加条件的作用域?我已经求助于原始sql \xe2\x80\xa6
\nscope :awaiting_funding, ->(resubmissions: false) {\n\n joins("LEFT OUTER JOIN products on products.item_id = my_objects.id and products.product_type = 11 and products.item_type = \xe2\x80\x98MyObject\xe2\x80\x99\xe2\x80\x9d).where('products.id is null')\n\n}\nRun Code Online (Sandbox Code Playgroud)\n但我想将其转换为更像 Rails 的查找器方法。
\n定义一个新的has_many
class MyObject < ApplicationRecord
has_many :products, inverse_of: :application, as: :item
has_many :my_object_products, -> { where(product_type: 11, item_type: 'MyObject') }, class_name: 'Product'
Run Code Online (Sandbox Code Playgroud)
现在您可以定义您的范围
scope :awaiting_funding, ->(resubmissions: false) {
where.missing(:my_object_products)
}
Run Code Online (Sandbox Code Playgroud)
这将创建查询 whereproduct_type和item_typeare part of the ON in LEFT OUTER JOIN
PS:使用更好的名称,my_object_products但你明白了。
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |