2014-05-16 2 views
-2

나는 사용자가 자신의 베팅이 최종적인 (더 이상 생성하거나 업데이트 할 수없는) 특정 날짜와 시간까지 자신의 제출물 (베팅)을 '생성'하고 '업데이트'할 수있게하고 싶습니다. 이 과정은 매주 반복됩니다.특정 날짜와 시간에 작업을 방지하는 방법은 무엇입니까?

저는 Rails에 처음으로 익숙합니다.이 용어 나 무엇을 검색해야하는지 확실하지 않습니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

답변

1

아마도 이것을 달성하는 가장 쉬운 방법은 before_filter (Rails 3.x) 또는 before_action (Rails 4.x)을 컨트롤러에 추가하는 것입니다. 이렇게하면 다음과 같이 할 수 있습니다.

만들기/업데이트 작업이있는 경우 submissions_controller.rb이 있다고 가정합니다. 만들기 및 업데이트 작업에만 적용되는 필터를 추가하십시오. 그런 다음 컨트롤러에서 개인 메소드를 구현하여 사용자를 root_path 또는 다른 곳으로 리디렉션하고 이유에 대한 플래시 메시지를 제공 할 수 있습니다.

하지만 컨트롤러 액션에서 제외
class PagesController < ApplicationController 
    before_filter :check_if_bets_are_final, :only => [:create, :update] 

    def create 
    ... 
    end 

    def update 
    ... 
    end 

    private 
    def check_if_bets_are_final 
     if Time.now >= Time.new(2014, 02, 20) 
     flash[:error] = "You can no longer modify or submit new bets!" 
     redirect_to root_path 
     end 
    end 

end 

, 아마 (/ 모델 수준의 검증을 구현하는 날짜가 지난 경우이를 거부 확인, 안전을하는 것이 안전 할 것이다하거나 업데이트하는 다른 방법이있는 경우 미래에 해당 객체). 모델 후크 before_save을 통해이 작업을 수행 할 수 있습니다.이 작업에서는 위와 비슷한 검사를 수행 할 수 있습니다.

다른주의 사항은 서버가있는 위치에 따라 Time.now이 다른 시간대에있을 수 있다는 점입니다. 수표를 찍을 때이 사실을인지하고 이것을 명심해야합니다.

+0

이것은 의미가 있지만 프로세스가 다시 시작될 때 사용자가 다음 주에 새로운 제출을 만들지 못하게하기 때문에 한 번만 작동하는 것으로 보입니다. – user3232837

+0

내가 할 수있는 일은 관리자 인터페이스를 사용하여 편집 할 수있는 모델의 데이터베이스 열에 (2014 년 2 월 20 일 위의 코드에서) 비교하는 시간을 절약하는 것입니다. heroku를 사용하는 경우 환경 변수. 그래야 문제를 해결할 수 있습니다. – derekyau

+0

예. 계속해서 날짜를 앞으로 이동하면 이전 주 제출물을 다시 편집 할 수 있습니다. 특히 점수를 유지하면 점수가 바뀔 수 있으므로 문제가 될 수 있습니다. – user3232837

0

특정 구현을 제공하지 않았기 때문에 Ruby 또는 Rails에만 문제가있는 경우 잘 모르겠습니다. 그러나 귀하의 질문에 주어진, 나는 사용자가 내기를 만들 때 데이터베이스에 datetime 변수를 저장합니다. 사용자가 내기를 '업데이트'하려고 할 때마다 데이터베이스에서 특정 기간이 지났는지 여부를 확인하십시오. 희망이 도움이됩니다.

관련 문제