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方法来验证它。如果我删除该功能,用户可以评价很多时间,如果我添加此功能,用户无法评价它。谁知道这里有什么问题?感谢
答案 0 :(得分:1)
我也遇到了同样的问题。我尝试创建一个应用程序,在该应用程序中,特定用户只能在当天添加standup。我在我的控制器创建动作中编写了代码。该逻辑与您的问题几乎相似,但我在您的代码中发现了一个问题,因为您的日期未正确比较Time.now - 1.day
以此格式返回2018-01-22 11:24:23 +0545
和standup[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
,代码有效。
它也可能对其他观众有所帮助。