2010-03-13 3 views
0

내 앱에는 계절 상품이있는 사용자가 있습니다. 사용자가 제품을 선택하면 해당 제품의 시즌을 선택할 수도 있습니다. 우리는 각 제품에 대해 시작일과 종료일을 선택하도록함으로써이를 수행합니다.date_select를 사용하고 Rails에서 연도를 삭제할 때 순서대로 날짜를 유지 하시겠습니까?

우리는 date_select을 사용하여 두 세트의 드롭 다운을 생성합니다. 하나는 시작 날짜이고 다른 하나는 종료 날짜입니다.

우리 모델에는 몇 년이 포함되지 않습니다. 그래서 우리는 다음 옵션을 사용합니다 : discard_year => true

우리의 문제를 설명하기 위해 우리의 제품은 사과라고 생각합니다. 벤더 X는 매년 9 월에서 1 월까지 사과를 나른다. 올해는 관련성이 없기 때문에 discard_year => true을 사용합니다. 그러나 특정 연도가 부적합한 경우 시작 날짜부터 종료 날짜까지의 상대적인 시점이 적절합니다. 이것은 우리의 문제가 발생하는 곳입니다.

discard_year => true을 사용하면 Rails는 데이터베이스에서 1 년을 설정하지만보기에는 나타나지 않습니다. Rails는 우리 앱에서 모든 연도를 0001로 설정합니다. 사과 예제로 돌아 가면, 이는 데이터베이스가 사용자가 0001 0001 년 1 월을 선택했다고 생각한다는 것을 의미합니다. 이는 여러 가지 이유로 우리에게 문제입니다.

는이 문제를 해결하기 위해, 내가 구현해야하는 논리는 다음과 같다 :

  • season_start의 달/일 수치 전에 SEASON_END되는 월/일, 다음 표준 레일 방식이 좋은 경우.

  • 그러나 season_start 월/일이 AFTER season_end month/day 인 경우에는 season_end의 연도가 season_start + 1의 연도와 같도록 데이터베이스 필드를 동적으로 업데이트해야합니다. 예를 들어, 사용자가 10 월 15 일부터 1 월 15 일을 선택하면, 그가 의도 한 것은 10 월 15 일 0001에서 1 월 15 일까지입니다.이를 반영하기 위해 앱이 필요합니다.

내 추측은 내 제품 모델의 after_save 또는 after_update으로 실행되는 사용자 정의 메소드를 만들 것입니다. 하지만 어떻게해야할지 모르겠습니다.

아이디어가 있으십니까? 아무도이 문제가 없었나요? 감사!

답변

0

Product 모델에 before_save 콜백을 추가하십시오.

class Product < ActiveRecord::Base 

    before_save :fix_end_date 

    def fix_end_date 
    self.end_date +=1.year if start_date > end_date 
    end 

end 
+0

감사합니다. 이것은 옳은 것처럼 보인다. 지금 구현 중이고 작동 할 때 확인합니다. – MikeH

관련 문제