ruby-on-rails - Rails 4 - 插入重复的 ActiveRecord 数据

标签 ruby-on-rails ruby ruby-on-rails-4 activerecord

我开发了一些对象,下面是我的代码。

if ObjectRating.where(user_id: current_user.id, object_id: @object.id).present?
    rating = ObjectRating.where(user_id: current_user.id, object_id: @object.id).first
    if rating.update_attributes(rating_params)
      @jsonResult.object = rating
    else
      @jsonResult.status = false
      @jsonResult.message = "Please Retry"
    end 
  else
    rating = @object.object_ratings.new(rating_params)
    rating.user_id = current_user.id

    if rating.save
      @jsonResult.object = rating
    else
      @jsonResult.status = false
      @jsonResult.message = "Please Retry"
    end 
  end 

评分参数是

private
def rating_params
  params.require(:object_rating).permit(:rating)
end

它运行良好,但有时会向数据库中插入重复数据。


+----------------------------------------------------------+
| id, object_id , user_id, rating, created_at, updated_at  |
+----------------------------------------------------------+
| 1, 100, 200, 8 ,2015-06-26 10:52:34, 2015-06-26 10:52:48 |
| 2, 100, 200, 8 ,2015-06-26 10:52:34, 2015-06-26 10:52:34 |
| 3, 120, 230, 8 ,2015-06-26 10:54:32, 2015-06-26 10:54:32 |
+----------------------------------------------------------+

ID 1, 2 是同一个对象。

我在保存到 Controller 之前检查过,为什么它为下一个创建重复记录?

最佳答案

您可以添加以下列object_id、user_id、rating 的索引。 创建迁移,例如,

add_index :object_ratings, [:object_id , :user_id, :rating], unique: true

关于ruby-on-rails - Rails 4 - 插入重复的 ActiveRecord 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31065116/

相关文章:

ruby-on-rails - 事件记录检查属性是否在基于另一个属性的数组中

jquery pjax请求发送两次

ruby-on-rails - Rails文件上载(回形针)编辑

ruby-on-rails - 将我所有的 javascript 放在 application.js 中并使用 require_tree 可以吗?

ruby-on-rails - ruby 中的哈希和函数参数

mysql - Rails 4.1、Ruby 2.1、Devise,为什么我的 .where() 中有多个条件的 'syntax error, unexpected tConstant'?

ruby - 当我用 Ruby 解析 YAML 时,它改变了我的 anchor 名称

ruby - 在线程不起作用的情况下提高 ruby​​ 代码性能

mysql - 使用 Sequel table_name.all 时获取行的结果

ruby-on-rails - 如何在 rails 4 的 ActiveRecord 查询中获取哈希(attr_accessor)中的计算值?