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 пользователь может голосовать только один раз в день
Я не уверен, в чем вопрос. Вы говорите, что ваш метод проверки не работает должным образом? Что он не позволит пользователю оценивать вообще, даже если они уже не оценили что-то уже сегодня? – MrDanA
Уверены, что у вас нет ошибок на консоли; –
ну, позвольте мне объяснить. метод user_can_rate_after_one_day должен работать следующим образом: когда нет скорости, он должен проверять true. если есть ставка, и ставка не старше одного дня, она должна быть недействительной. Я записываю условие if как «if (r [0]! = nil && (Time.now <(r [0] .created_at + 1.day)))", когда нет записи, я думаю, что условие должно быть ложным, затем пройти проверку, но в результате это условие всегда истинно и валидация всегда терпит неудачу. – user1611237