我的命名范围有问题。
def self.by_status(status)
arr = status.split(',').map{ |s| s }
logger.debug "RESULT: #{arr.inspect}"
where(status: arr)
end
当我使用多个值调用此范围时,arr = ["New", "Open"]
这不会返回任何结果,但它应该。如果我在控制台中尝试此命令:Shipment.where(status: ['New', 'Open'])
我得到了我期待的结果。
我在这里错过了什么吗?
编辑(添加了类方法的调用):
def self.to_csv(options = {}, vendor_id, status)
CSV.generate(options) do |csv|
csv << column_names
if !vendor_id.blank? && status.blank?
by_vendor_id(vendor_id).each do |product|
csv << product.attributes.values_at(*column_names)
end
elsif !vendor_id.blank? && !status.blank?
by_vendor_id(vendor_id).by_status(status).each do |product|
csv << product.attributes.values_at(*column_names)
end
elsif vendor_id.blank? && !status.blank?
logger.debug "by_status result: #{by_status(status).inspect}"
by_status(status).each do |product|
csv << product.attributes.values_at(*column_names)
end
else
all.each do |product|
csv << product.attributes.values_at(*column_names)
end
end
end
end
答案 0 :(得分:0)
在你的模特中试试这个:
scope :by_status, ->(*statuses) { where(status: statuses) }
然后在您的代码中,您可以致电:
Shipment.by_status('New', 'Open')
这也可以灵活地采用一个参数:
Shipment.by_status('New')