我试图从基于搜索查询的activerecord模型中获取一组名称.
我的项目模型中有这个方法.
def self.search(search) if search where(['lower(name) LIKE ?', "%#{search}%"]) else Item.all end end
我试图找出使用这两行之间的区别,他们都返回相同的东西.
Item.search('ex').select('name').map(&:name)
VS
Item.search('ex').map(&:name)
Item.search('ex').select('name').map(&:name)
在上面的语句中,您只选择name
结果中的列Item.search('ex')
,然后使用它来获取所有列的名称.map(&:name)
.
但是,在以下声明中:
Item.search('ex').map(&:name)
您没有选择name
列,只是.map(&:name)
从结果中获取名称Item.search('ex')
.
是的,他们返回完全相同的结果.
因此,如果您只想从搜索结果中获取名称数组,那么选择名称列是多余的.跟着这个:
Item.search('ex').map(&:name)
或者,甚至更好,使用采摘:
Item.search('ex').pluck(:name)
它绕过了实例化每个ActiveRecord
对象的需要,而只是直接返回查询的值Array
,从而提高了执行时间和内存消耗方面的性能.