ruby-on-rails - Rails find_or_create_by 创建重复项

标签 ruby-on-rails

出于某种原因,下面的代码会创建重复项。它并不总是发生。如果我刷新足够多次,它就会停止发生。奇怪的是,它创建的“重复”甚至与我的用户 ID 不匹配!这是在开发中。 User 表甚至没有 id = 1 的用户。

@food.page_views.find_or_create_by_user_id(current_user)

这是我的 current_user 方法。

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
  rescue ActiveRecord::RecordNotFound
    session[:user_id] = nil
  end
  helper_method :current_user
end

从控制台:

PageView Load (0.4ms)  SELECT "page_views".* FROM "page_views" WHERE "page_views"."food_id" = 2 AND "page_views"."user_id" = 3 LIMIT 1
(4.0ms)  BEGIN
SQL (0.6ms)  INSERT INTO "page_views" ("created_at", "food_id", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id"  [["created_at", Tue, 25 Sep 2012 01:36:43 UTC +00:00], ["food_id", 2], ["updated_at", Tue, 25 Sep 2012 01:36:43 UTC +00:00], ["user_id", 1]]

最佳答案

使用current_user.id而不是current_user:

@food.page_views.find_or_create_by_user_id(current_user.id)

“魔术方法”需要一个 user_id 整数;你给它一个对象。

关于ruby-on-rails - Rails find_or_create_by 创建重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575223/

相关文章:

ruby-on-rails - 如何检测我的应用程序是否在 Heroku 上运行?

ruby-on-rails - 如何在 AngularJS 和 Ruby on Rails 中实现功能标志?

mysql - Docker-Compose:为什么我的 Rails 图像在访问 MySQL 数据库时存在权限问题?

ruby-on-rails - 如何从Rails 4中的子域获取资源ID?

ruby-on-rails - 电话格式

ruby-on-rails - 回形针:为什么尽管质量降低了,图像的大小却没有太大变化?

ruby-on-rails - HTML5 亚马逊 S3 直接上传

ruby-on-rails - "heroku run rake db:migrate"命令返回 ETIMEDOUT 错误信息

javascript - 基于另一个选择框更新一个选择框 (Ruby on Rails)

ruby-on-rails - 是否可以在电子邮件中添加 IE 条件语句?