2017-03-26 34 views
0

我有一个使用Postgresql的Rails应用程序。我希望用户能够选择特定日期的时间范围。例如,如果我是用户,周一我想选择(上午9:00 - 下午2:00)作为我的时间范围。如何格式化时间戳范围postgresql rails

然后我会如何格式化以保存在Postgresql数据库中?

迁移:

class CreateMondayTimeFrames < ActiveRecord::Migration 
    def change 
    create_table :monday_time_frames do |t| 
     t.belongs_to :user, index: true 
     t.tstzrange :time_range 
     t.timestamps null: false 
    end 
    end 
end 

控制器:

def create 
    # The params I am passing in: 
    # params[:time_start] => "9:00am", params[:time_stop] => "2:00pm" 
    # Sudo: formatted_timestamp_range = (params[:time_start]..params[:time_stop]).convert_to_range 
end 
+0

http://edgeguides.rubyonrails.org/active_record_postgresql.html – max

回答

0

通过改变数据类型到int8range解决该问题。如果有人可以给出tstzrange的答案,我会将您的答案标记为正确答案。

class CreateMondayTimeFrames < ActiveRecord::Migration 
    def change 
    create_table :monday_time_frames do |t| 
     t.belongs_to :user, index: true 
     t.int8range :time_range 
     t.timestamps null: false 
    end 
    end 
end 

控制器

def create 
    start = Time.zone.parse("2017-03-26 9:00am").to_i 
    stop = Time.zone.parse("2017-03-26 2:00pm").to_i 
    formatted_time = (start..stop) 
    MondayTimeFrame.create!(user_id: 1, time_range: formatted_time) 
end 

测试控制台:

$ start = Time.zone.parse("2017-03-26 9:00am").to_i 
    $ stop = Time.zone.parse("2017-03-26 2:00pm").to_i 

    $ now = Time.zone.parse("2017-03-26 12:00pm").to_i 

    $ (start..stop).include?(now) 
    $ => true 
+0

不要添加一个答案,然后要求解决不同的问题。改为提出一个单独的问题。 –