使用postgres在rails中保存日期和数据

时间:2017-01-13 15:40:44

标签: ruby-on-rails json postgresql

我正在使用postgresrails。我有一个酒店reservation市场应用程序。我正在努力为房间实施unavailable dates。因此,为了从主机获取unavailable dates,我为主机提供日历以检查不可用的日期。因此,为了保存这些数据之王,我将json field添加到table roomunavailable dates可能看起来像这样

"availability":{"days":[{"available":3,"date":"2017-01-19"},{"available":0,"date":"2017-01-20"},{"available":2,"date":"2017-01-22"},{"available":5,"date":"2017-01-23"}]}

available告诉number rooms可用的date

从长远来看这可以吗?我有点担心,因为这个设计的缺点是保持每天的json记录和一些内务处理,以便在日期过后从json中删除日期。我想不出另一种选择。这是唯一的选择吗?谢谢..

1 个答案:

答案 0 :(得分:2)

JSON和HSTORE数据类型是无模式数据的强大工具,但是当您将它们用于应用程序中的核心数据时,应该将其标准化,而不是最佳解决方案。您将不得不处理数据重复和过于复杂和复杂的应用程序代码。

你应该关注的是简单的旧关系建模:

class Hotel < ActiveRecord::Base
  has_many :rooms
  has_many :reservations, through: :rooms
end

class Customer < ActiveRecord::Base
  has_many :reservations
end

class Room < ActiveRecord::Base
  belongs_to :hotel
  has_many :reservations
end

# check_in - date or datetime
# check_out - date or datetime
class Reservation < ActiveRecord::Base
  belongs_to :room
  belongs_to :customer
  has_one :hotel, through: :room
end

在这里,您可以使用reservations表来存储签到和结帐时间。您可以使用rooms表中的联接查询hotels表或reservations以查看哪些天不可用。有很多方法可以做到这一点,而且这个问题有点超出范围。