我有Stock
模型,其属性为ticker
。
我想要做的是找到Stock
所有ticker.include?('at')
个对象,而不使用枚举器迭代所有对象。
我试过Stock.where("ticker.include?(?)", 'at')
,但无济于事。
答案 0 :(得分:3)
要不迭代,您需要以声明方式执行:SQL
。要在SQL
中执行此操作,您需要基础RDBMS
的一项功能:LIKE
,ActiveRecord
是不够的(我认为可以在Arel
中使用RDBMS
)。
无论如何,我在这里理所当然地认为两件事:你的自动收报机字段是一个字符串,而不是一个数组,而你的MySQL
是Postgresql
或Stock.where("ticker LIKE ?", '%at%')
,我选择了
JSoup.connect().get()
答案 1 :(得分:1)
或者,如果您只想使用Arel而不使用SQL。您可以使用以下内容:
Stock.where(Stock.arel_table[:ticker].matches('%at%'))
您可以在 ApplicationRecord 中创建帮助以简化查询。
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
def self.arel_attr(attr, method, *args)
where(arel_table[attr].public_send(method, *args))
end
end
导致查询:
Stock.arel_attr(:ticker, :matches, '%at%')
有关您可以调用的方法的完整列表,请查看documentation。