Ruby on rails Rails 4为子对象应用作用域
我正在尝试创建一个只返回父对象的受限对象的作用域:Ruby on rails Rails 4为子对象应用作用域,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在尝试创建一个只返回父对象的受限对象的作用域: class BillingData scope :apply_restrictions, -> (restricted_numbers) { joins(billing_data: [:billing_data_lines]).where(billing_data_lines: {info_number: restricted_numbers }) } end 并这样称呼它: BillingData.a
class BillingData
scope :apply_restrictions, -> (restricted_numbers) {
joins(billing_data: [:billing_data_lines]).where(billing_data_lines: {info_number: restricted_numbers })
}
end
并这样称呼它:
BillingData.apply_restrictions(restricted_numbers)
这将起作用,或者只是返回匹配的任何内容。如何重构此作用域以返回主对象,但要使用已筛选的子账单数据行列表?首先需要
- 如果您还没有将
有很多:账单数据行添加到您的
模型中账单数据
- 将
连接(计费数据:[:计费数据行])更改为
连接(计费数据行)
rails控制台
,查看将从您的作用域生成哪些SQL:
BillingDatum.apply_restrictions(123).to_sql
将返回(格式化为可读性):
这里要注意的关键是。因此,是的,您将只获得与指定条件匹配的父记录。关联扩展 您可能希望使用 假设您有以下关联的一些模型;您应该能够在关联上设置自定义方法,以便仅从数据库返回特定记录:
#app/models/billing.rb
Class Billing < ActiveRecord::Base
has_many :records do
def only_today
where created_at: Date.today
end
end
end
#app/models/billing.rb
类计费
这将允许您拨打:
#app/controllers/billings_controller.rb
Class BillingsController < ApplicationController
def show
billing = Billing.find params[:id]
@records = billing.records.only_today
end
end
#app/controllers/billings_controller.rb
类BillingController<应用程序控制器
def秀
billing=billing.find参数[:id]
@记录=billing.records.only_今天
结束
结束
#app/controllers/billings_controller.rb
Class BillingsController < ApplicationController
def show
billing = Billing.find params[:id]
@records = billing.records.only_today
end
end