2017-09-07 8 views
0

signed_up (이메일 알리미를 보내는 것이 목표 임) 후 48 시간 내에 내 사용자가 레스토랑을 만들었는지 확인하는 데 문제가 있습니다. 가입 후 48 시간 내에 식당이 있는지 확인하십시오.

내가 differents의 물건을 시도하고 지금 난 내

사용자 모델이 함께 있어요 : 내가 sidekiq와 내가 didn를 것을 보았 기 때문에 User.rb

after_create :reminder 



def reminder 
    if Time.now.utc == self.created_at + 48.hours && self.restaurants.count == 0 
    UserMailer.theactionofthemail(self).deliver_later 
end 

나는 이런 식으로 시도 내 UserMailers deliver_later에 일자리를 만들어야합니다 .. :)

모든 단서가 있습니까? 분명하지 않다면 말해주세요! 사용자의 created_at에 (일반적으로 통과 한 경우를 밀리 초에,> = 말하고 싶은, BTW)

답변

1

after_create 그 방법은 바로 후 생성 호출 사전에 감사합니다, 그래서 created_at는 동일하지 않습니다.

Instad 나는 ActiveJob을 탐험 해보길 권합니다. 48시간 나중에 실행되는 경우를 제외하고는이 같은 질문을하는 작업을 만듭니다 : 이미 Sidekiq를 사용하는 경우

def perform(user) 
    return unless user.restaurants.count.zero? 
    UserMailer.theactionofthemail(user).deliver_now 
end 

, 당신은 ActiveJob에 대한 백엔드로 구성 할 수 있습니다 : 그 일에서

after_create :reminder 

def reminder 
    CreateRestaurantReminderJob.set(wait: 48.hours).perform_later self 
end 

을 , 또는 그것의 자신의 노동자를 사용하십시오. 구문은 변경 될 수 있지만 동일한 개념이 적용됩니다.

+0

답장을 보내 주셔서 감사합니다. 지금 시도해 보겠습니다. –

+0

잘 이해하면 메일이 전송되어 48 시간을 기다리고 있습니다. 그리고 사용자가 레스토랑을 만들었다면 각 작업 (기본 sidekiq의 경우 15 초)을 확인하고 있습니까? –

+0

코드 예제를 더 명확하게 업데이트했습니다. 사용자 생성 후'CreateRestaurantReminderJob'은 대기열에 추가되고 48 시간이 지난 후에 만 ​​실행되도록 설정됩니다 (지금까지 이메일이 전송되지 않음). 작업자가 실행되면 "이 사용자는 레스토랑을 아직 만들지 않았습니까?"라고 묻고, 그렇지 않은 경우 바로 이메일을 보냅니다. – Leito