2013-04-25 6 views
0
class Rate < ActiveRecord::Base 
attr_accessible :image_id, :rate, :user_id 
belongs_to :image 
belongs_to :user 
validate :user_can_rate_after_one_day 

before_save :default_values 

def default_values 
self.rate ||=0 
end 

protected 
    def user_can_rate_after_one_day 
    r=Rate.where(:image_id =>image_id, :user_id=> user_id).order("created_at DESC").limit(1) 

    if((Time.now - 1.day) < r[0].created_at) 
     self.errors.add(:rate,"you can only vote once per day") 
    else 
     return 
    end 
    end 
end 

나는 하나의 요율표가 있습니다. 사용자가 하루에 한 번만 평가할 수 있기를 원합니다. 그것을 유효화하기 위해 user_can_rate_after_one_day 메소드를 작성합니다. 함수를 삭제하면 사용자가 많은 시간을 평가할 수 있습니다.이 함수를 추가하면 사용자가 평가할 수 없습니다. 여기에 뭐가 잘못 됐는지 아는 사람? 감사합니다rails3 사용자는 하루에 한 번만 투표 할 수 있습니다.

+0

나는 무엇이 문제인지 잘 모르겠습니다. 유효성 검사 방법이 제대로 작동하지 않는다는 말입니까? 그것은 이미 사용자가 이미 무언가를 평가하지 않았더라도 사용자가 전혀 평가하지 못하게 할 것입니까? – MrDanA

+0

콘솔에 오류가 없습니까? –

+0

잘 설명해 드리겠습니다. 메소드 user_can_rate_after_one_day는 다음과 같이 작동해야합니다. 비율이 없으면 true를 검증해야합니다. 금리가 있고 금리가 하루보다 오래되지 않으면 금이 무효화되어야합니다. "if (r [0]! = nil && (Time.now <(r [0] .created_at + 1.day))))") "로 if 조건을 씁니다. false이면 유효성 검사가 통과하지만 결과는 항상 true이고 유효성 검사는 항상 실패합니다. – user1611237

답변

0

나는 또한 동일한 유형의 문제가 있습니다. 나는 특정 사용자가 현재 날짜에 대해 스탠드 업을 추가 할 수있는 응용 프로그램을 만들려고했습니다. 컨트롤러에 코드를 작성하여 액션을 작성했습니다. 논리가 귀하의 질문과 거의 비슷하지만 귀하의 날짜가 적절히 비교되지 않는 한 가지 문제점을 발견했습니다. Time.now - 1.day2018-01-22 11:24:23 +0545standup[0].created_at 형식으로 반환됩니다.이 형식은 Mon, 22 Jan 2018 08:58:57 UTC +00:00입니다. 이 문제를 해결하기 위해 동일한 형식의 날짜 (예 : (Time.now - 1.day).strftime('%F %H:%M:%S') < standup[0].created_at.strftime('%F %H:%M:%S'))를 모두 true으로 변환했으며 코드가 작동합니다.

다른 시청자에게도 도움이 될 수 있습니다.

관련 문제