Ruby 更复杂的续集选择
Sequel中有一个简单的数据库:Ruby 更复杂的续集选择,ruby,sequel,Ruby,Sequel,Sequel中有一个简单的数据库: DB = Sequel.sqlite DB.create_table :items do primary_key :id DateTime :date String :name end items = DB[:items] items.insert(:name => 'abc', :date => DateTime.now) items.insert(:name => 'ghi', :date => Date
DB = Sequel.sqlite
DB.create_table :items do
primary_key :id
DateTime :date
String :name
end
items = DB[:items]
items.insert(:name => 'abc', :date => DateTime.now)
items.insert(:name => 'ghi', :date => DateTime.now)
items.insert(:name => 'def', :date => DateTime.now)
问题是:在数据库中存储“奇怪”对象(如DateTime)是一个好主意吗
puts items.first(:name => 'ghi')[:date].year
输出“2010”,所以,好吧,它的工作。但我还是很好奇。如果没有什么不好的,那过滤呢?诸如此类:
puts items.first(:date.year => 2010)[:name]
。。。不行。有没有可能用另一种方式呢?怎么做?我想你在问两个不同的问题:
DateTime
属性类型承认了这一事实,并在其所有受支持的后端上提供了一个抽象DateTime
很可能是其中之一),ORM的语法糖无法提供更复杂的过滤。在这种情况下,您可能需要下拉到每数据库SQL工具来实现您想要的功能,或者至少在形成语法糖解决方案时要注意底层语义bjg是正确的。针对您的具体情况,而不是:
puts items.first(:date.year => 2010)[:name]
你可以试试:
puts items.first(:date.extract(:year) => 2010)[:name]
如果您的数据库支持SQL标准提取功能(并非所有数据库都支持),则该功能应该可以工作。如果数据库没有,则必须调用数据库中存在的任何类似函数