在rails 4.1应用程序中,我需要将一个对象添加到";关联关系";
def index
employee = Employee.where(id_person: params[:id_person]).take
receipts_t = employee.receipts.where(:consent => true) #gives 3 results
receipts_n = employee.receipts.where(:consent => nil).limit(1) #gives 1 result
#I would need to add the null consent query result to the true consent results
#something similar to this and the result is still an association relation
@receipts = receipts_t + receipts_n
end
有简单的方法吗?
解决此问题的方法:
def index
employee_receipts = Employee.find_by(id_person: params[:id_person]).receipts
receipts_t = employee_receipts.where(consent: true)
receipts_n = employee_receipts.where(consent: nil).limit(1)
@receipts = Receipt.where(id: receipts_t.ids + receipts_n.ids)
end
不幸的是,.or()
不能在这里使用,因为它只能从Rails v5.0.0.1 中使用
你可以这样做
receipts_t_ids = employee.receipts.where(:consent => true).pluck(:id)
receipts_n_ids = employee.receipts.where(:consent => nil).limit(1).pluck(:id)
@receipts = Receipt.where(id: receipts_t_ids + receipts_n_ids)
为了避免额外的查询并将数组保留在内存中,可以使用or
像这样:
def index
employee_receipts = Employee.find_by(id_person: params[:id_person]).receipts
@receipts =
employee_receipts.where(consent: true).or(
employee_receipts.where(consent: nil).limit(1)
)
end