2013-06-11 18 views
8

Tôi đang cố gắng sử dụng chức năng [tuyệt vời] của ice_cube và recurring_select đá quý để xử lý các sự kiện lặp lại. Tôi đã có một cột (văn bản) schedule trong cơ sở dữ liệu của tôi và sau đây trong mô hình sự kiện:ice_cube và recurring_select đá quý và sự cố

def schedule=(new_schedule) 
    write_attribute(:schedule, RecurringSelect.dirty_hash_to_rule(new_schedule).to_yaml) 
    end 

    def converted_schedule 
    Schedule.from_yaml(self.schedule, :start_date_override => self.start_date) 
    end 

Nhìn vào cột lịch trong psql, nó dường như được lưu trữ lịch trình một cách chính xác.

Dưới đây là hình thức của tôi:

.control-group 
    = f.label 'Date', :class => 'control-label' 
    .controls 
    = f.text_field :start_date, :class => 'datepicker' 

.control-group 
    = f.label 'Recurring?', :class => 'control-label' 
    .controls 
    = f.select_recurring :schedule, :allow_blank => true 

Tuy nhiên, khi tôi cố gắng để đầu ra converted_schedule, nó chỉ hiển thị ngày tháng bắt đầu và sẽ không hiển thị bất kỳ ngày bổ sung. Tôi có một vài nghi ngờ rằng tôi đã tinkered không thành công ... có lẽ YAML không được chuyển đổi một cách chính xác cho các phương pháp converted_schedule? Có lẽ tôi cần một ngày kết thúc (tôi không thấy nơi chức năng này có sẵn trên recurring_select)?

Trả lời

14

Sau khi tham khảo ý kiến ​​John Crepezzi (tác giả của đá quý ice_cube - cảm ơn John!), Tôi thấy rằng tôi đã lưu trữ quy tắc cho các lần lặp lại thay vì theo lịch biểu. Mã sau đã khắc phục sự cố:

serialize :schedule, Hash 

def schedule=(new_schedule) 
    write_attribute(:schedule, RecurringSelect.dirty_hash_to_rule(new_schedule).to_hash) 
end 

def converted_schedule 
    the_schedule = Schedule.new(self.start_date) 
    the_schedule.add_recurrence_rule(RecurringSelect.dirty_hash_to_rule(self.schedule)) 
    the_schedule 
end 

Lưu ý: Tôi cũng chuyển sang lưu trữ cột đó dưới dạng băm thay vì YAML như đã đăng trước đây.

+1

Tôi không chắc chắn tôi sẽ theo dõi. Tôi đã làm việc với điều này khá một chút gần đây là tốt, và tôi bắt đầu nhận ra (suy nghĩ?) Rằng những gì tôi thực sự muốn là để lưu trữ các quy tắc, và xây dựng một lịch trình với những quy tắc sau khi kéo từ cơ sở dữ liệu. Bạn có thể xác nhận/từ chối nếu bạn trộn lẫn việc sử dụng "quy tắc" và "lịch biểu" không? Ý bạn là bạn muốn lưu trữ các quy tắc chứ không phải lịch trình? – Volte

Các vấn đề liên quan