防止相同的值再次保存到DB Ruby on Rails上

时间:2014-05-20 04:30:02

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个名为用户历史记录的表,一条消息将与用户ID一起保存到该表中。我也不希望从同一个用户再次保存相同的消息。 以下是我的控制器中保存消息的部分。

    if delete == 1
      if UserHistory.where(comments:message, user_id:id).present?
        self.update_attributes(points: (self.points + point))
        UserHistory.where(comments:message, user_id:id).first.destroy        
      end
    elsif UserHistory.where(comments:message, user_id:id).present?
    else  
      self.update_attributes(points: (self.points + point))
      UserHistory.create(comments:message, user_id:id)        
    end

在此代码中,如果找到具有相同ID的消息,则我没有给出任何操作,否则创建一个新字段。

我的问题是我的本地机器一切正常。但是,当我在我的服务器中部署到开发时,它总是不起作用..有时同一用户的相同消息会再次保存。为什么会这样?任何解决方案?

1 个答案:

答案 0 :(得分:2)

UserHistory型号

中执行此操作
validates_uniqueness_of :comments, :scope => :user_id

更新:在else块中只需反转这些行,以便在更新点之前触发验证

else      
  user_history = UserHistory.create(comments:message, user_id:id)
  self.update_attributes(points: (self.points + point)) unless user_history.blank?
end