我有一个名为“用户历史记录”的表,一条消息将与用户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的消息,则没有给出任何操作,否则将创建一个新字段。
我的问题是在我的本地机器上一切正常工作。但是当我在我的服务器中部署到开发时,它并不总是工作的。有时,来自同一用户的相同消息再次被保存。这一切为什么要发生?有解决办法吗?
发布于 2014-05-19 20:35:48
在UserHistory
模型中这样做
validates_uniqueness_of :comments, :scope => :user_id
Update :在else
块中,只要反转行,就可以在更新点之前触发验证。
else
user_history = UserHistory.create(comments:message, user_id:id)
self.update_attributes(points: (self.points + point)) unless user_history.blank?
end
https://stackoverflow.com/questions/23751040
复制