1

我有一个模型与数组列。所以我基本上把语言作为一个数组保存到Postgres中。例如,driver_language =["English", "Spanish", "French"]红宝石轨道搜索阵列(有效记录)

在我的查询中,我想选择驱动程序语言中包含submitted_driver_language ["English", "Spanish"]的所有车辆。或者,提交的driver_language数组中至少有一个元素包含在作为数组的driver_language列中。我如何将该条件添加到下面的查询中?任何帮助将不胜感激

Vehicle.where(:vehicle_type => vehicle_type, :active => true, :company_activated => true, :capacity => number_of_people.to_i..Float::INFINITY) 
+1

你存储的语言为[PostgreSQL的数组(http://www.postgresql.org/docs/9.1/static/arrays.html),或者只是在你的数据库中的字符串。你不规范你的数据,创建一个语言表并使用'has_and_belongs_to_many'关联? – spickermann

回答

0

使用arel_table。

@vehicle = Vehicle.where(:vehicle_type => vehicle_type, :active => true, :company_activated => true, :capacity => number_of_people.to_i..Float::INFINITY) 

avehicle = @vehicle.arel_table 

@required_result = @vehicle.where(avehicle[:driver_language].matches('%#{"English", "Spanish"}%')) 
0

那么正则表达式呢?

Vehicle.where('driver_language ~* ?', 'english|spanish')