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 方法来验证它。如果我删除该功能,用户可以多次评价,如果我添加该功能,用户不能评价它。有人知道这里有什么问题吗?谢谢

4

1 回答 1

1

我也有同样类型的问题。我试图创建一个应用程序,其中特定用户只能为当天添加站立。我在控制器创建操作中编写了代码。逻辑与您的问题几乎相似,但我在您的代码中发现了一个问题,由于未正确比较您的日期Time.now - 1.day以这种格式返回2018-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,并且代码有效。

它也可能对其他观众有帮助。

于 2018-01-23T05:46:41.533 回答