我有一个带有几个资源的 Rails 应用程序,我需要在这些资源上运行涉及按位运算的查询。现在,我正在使用 PostgreSQL,并为我的“用户”模型创建了一个迁移,该模型使用 postgres 特定的“BIT VARYING”数据类型,因为这是在 postgres 网站上推荐的按位“&”操作:
add_column :users, :timeslots, :'BIT VARYING'
在我的一个查询中,我以这种方式使用“&”:
self.where("available_lbs > 0 AND status = 0 AND ? & timeslot > 0::bit AND available_end >= ?", user.timeslots, Time.now)
这似乎在我的机器上工作,但有两个问题:
- 数据类型和查询都是特定于数据库的,所以如果我迁移到另一个数据库,我可能不得不改变一些事情
- 此迁移似乎没有正确更新 schema.rb 文件。在描述如何创建表时,它仍然使用 Rails 'string' 数据类型:
create_table "users", :force => true do |t|
t.string "timeslots", :limit => nil
结尾
因此,当我在新机器上设置应用程序时,它使用了错误的数据类型并且事情中断了。对此有什么好的解决方案吗?(我尝试使用“二进制”数据类型,但这似乎不适用于 postgres)