我有以下代码:
def maturities
InfoItem.find_all_by_work_order(self.work_order).map(&:maturity)
end
我正在考虑将其更改为:
def maturities
InfoItem.where(work_order: self.work_order).map(&:maturity)
end
这样做会有什么好处吗?它似乎.where
比find_all_by
现在更普遍。
我有以下代码:
def maturities
InfoItem.find_all_by_work_order(self.work_order).map(&:maturity)
end
我正在考虑将其更改为:
def maturities
InfoItem.where(work_order: self.work_order).map(&:maturity)
end
这样做会有什么好处吗?它似乎.where
比find_all_by
现在更普遍。
我的观点是使用.where
是一种更好的方法。
当您使用基于属性的查找器时,您将不得不通过缺少调用的方法进行隧道化,并最终定义一个类方法 via class_eval
,该方法返回您的结果。这是您可能不需要做的额外处理。
此外,串在一起:find_by_this_and_this_and_this_and_this... 会变得丑陋。
github上的模块DynamicMatchers缺少方法:
def method_missing(name, *arguments, &block)
match = Method.match(self, name)
if match && match.valid?
match.define
send(name, *arguments, &block)
else
super
end
end
我认为主要优点是能够添加额外的标准到哪里,find_all_by 仅限于动态选择器的字段。如果您只有一个条件要搜索,那么我认为这是一种清洗,但是当您开始添加 3 或 4 时,动态查找器可能会很难看。散列很好看,如果需要,您可以将条件散列作为参数传递。动态查找器很酷,但我认为哪里可以更简洁地扩展并且更具可读性。