如何将对象附加到rails中的关联关系



在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

最新更新