2014-04-12 68 views
1

任何想法如何使用從某個位置生成的時區來創建具有相應郵政編碼的新記錄?設置每個記錄的時區

我已經創建了一個服務對象來幫助拉取郵政編碼信息。

我能夠在終端中使用此信息來設置郵政編碼,但當我嘗試before_save或before_create掛鉤時它不起作用。

class ServiceObject 
    include ActiveModel::Model 

    def self.get_timezone_name(location) 
    z = GoogleTimeZone.fetch(location.latitude, location.longitude) 
    ActiveSupport::TimeZone.find_tzinfo(z.time_zone_id) 
    end 
end 

class Location < ActiveRecord::Base 
    has_many :events 
    #name - String 
    #start_time - DateTime 
    #end_time - DateTime 
end 

class Event < ActiveRecord::Base 
    belongs_to :location 
    geocoded_by :full_address 
    before_create :zoned 

    private 
    def zoned 
    Time.zone = ServiceObject.get_time_zone(self.location) 
    end 

end 

我也試圖使用日期時間屬性gem設置事件的時區。再次,這在控制檯中工作,但沒有回調。記錄不是通過瀏覽器創建的,而是在控制檯中創建的。

回答

1

這裏是一個博客帖子我的時區與軌寫道:顯示在保存時

我建議你在你的位置上保存時區,更新它如果long/lat變化;它看起來像上面的事件和位置示例翻轉?事件應該有一個開始和結束,而不是位置?

class Location 
    has_many :events 

    geocoded_by :full_address 
    before_save :set_time_zone 

    private 

    def set_time_zone 
    if new_record? || latitude_changed? || longitude_changed? 
     self.time_zone = ServiceObject.get_time_zone(self) 
    end 
    end 
end 

class Event 
    belongs_to :location 
end 
在控制檯或控制器代碼

location = Location.last 
Time.use_zone(location.time_zone) do 
    location.events << Event.new({ ... }) 
end 

然後