Ruby on rails 有没有一种方法可以省略活跃的记录铸造(从博士后范围)?
我有一个方法可以检查模型实例的日期交点Ruby on rails 有没有一种方法可以省略活跃的记录铸造(从博士后范围)?,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我有一个方法可以检查模型实例的日期交点 def intersections Reservation.where("daterange && ?", self.daterange) end 假设我有预约,r=预约 => r、 交叉点 例外查询: 从日期范围和“[2020-02-102020-02-21”所在的预订中选择预订。*” 实际查询: 从日期范围和“2020-02-10”、“2020-02-11”、“2020-02-12”、“2020-02-13”、“2020-02-1
def intersections
Reservation.where("daterange && ?", self.daterange)
end
假设我有预约,r=预约
=>
r、 交叉点
例外查询:
从日期范围和“[2020-02-102020-02-21”所在的预订中选择预订。*”
实际查询:
从日期范围和“2020-02-10”、“2020-02-11”、“2020-02-12”、“2020-02-13”、“2020-02-14”、“2020-02-15”、“2020-02-16”、“2020-02-17”、“2020-02-18”、“2020-02-19”、“2020-02-20”中选择预订。*
模式:
我尝试了很多变体,但似乎强制转换隐藏在Active Record的深处。我是否可以为此查询关闭它?您可以使用属性API设置强制转换
class Reservation < ApplicationRecord
attribute :daterange, range: true
def intersections
Reservation.where(
"daterange && ?", self.daterange
)
end
end
@max AR在查询中加了引号,所以它失败了。但是AR::Attributes工作得很好。我根据为模型添加了属性:daterange,range:true。谢谢!С如果您添加此答案,我会将其标记为接受?
class Reservation < ApplicationRecord
attribute :daterange, range: true
def intersections
Reservation.where(
"daterange && ?", self.daterange
)
end
end
irb(main):026:0> Reservation.first.intersections
Reservation Load (0.6ms) SELECT "reservations".* FROM "reservations" ORDER BY "reservations"."id" ASC LIMIT $1 [["LIMIT", 1]]
Reservation Load (0.6ms) SELECT "reservations".* FROM "reservations" WHERE (daterange && '[2020-02-14,2020-02-16)') LIMIT $1 [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<Reservation id: 1, daterange: "[2020-02-14,2020-02-16)", created_at: "2020-02-14 11:13:13", updated_at: "2020-02-14 11:13:13">, #<Reservation id: 2, daterange: "(,)", created_at: "2020-02-14 11:33:16", updated_at: "2020-02-14 11:33:16">]>