rails3用户每天只能投票一次

时间:2013-04-25 15:03:42

标签: ruby-on-rails validation rate vote

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

1 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题。我尝试创建一个应用程序,在该应用程序中,特定用户只能在当天添加standup。我在我的控制器创建动作中编写了代码。该逻辑与您的问题几乎相似,但我在您的代码中发现了一个问题,因为您的日期未正确比较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,代码有效。

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