无法使用 ActiveRecord 更新记录(无轨道)

问题描述 投票:0回答:0

您好,我的 PostgreSQL 数据库中有下表:

CREATE TABLE user_logins (token VARCHAR(512) NOT NULL, user_id UUID UNIQUE NOT NULL, create_date TIMESTAMPTZ DEFAULT clock_timestamp(), last_visit TIMESTAMPTZ DEFAULT clock_timestamp(), expire TIMESTAMPTZ DEFAULT clock_timestamp() + INTERVAL '30 DAYS');

为此我有以下 ActiveRecord 类

require "active_record"

class UserLogin < ActiveRecord::Base

end

我想更新 last_visit 专栏,我尝试这样做:

  def update_last_visited(user_token)
    user_login = UserLogin.find_by(token: user_token)

    if user_login == nil
      return false
    end

    user_login.update(last_visit: Time.now.utc)
  end

但是,我得到这个错误:

2023-02-19 11:55:21 - ActiveRecord::StatementInvalid - PG::SyntaxError: ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...logins" SET "last_visit" = $1 WHERE "user_logins"."" IS NULL

据我所知,如果我有 ActiveRecord 对象,ActiveRecord 应该能够更新记录,还是我错过了什么? 我应该改为基于 where 进行更新吗?

一个最小的可复制示例:

require "active_record"
require "yaml"
require 'securerandom'

db_config_file = File.open("database.yml")
db_config = YAML::load(db_config_file)
ActiveRecord::Base.establish_connection(db_config)


class UserLogin < ActiveRecord::Base

end

def update_last_visited(user_token)
  user_login = UserLogin.find_by(token: user_token)
  
  if user_login == nil
    return false
  end
  
  user_login.update(last_visit: Time.now.utc)
end


user_login = UserLogin.new

user_login.token = "wompas"
user_login.user_id = SecureRandom.uuid

user_login.save

update_last_visited(user_login.token)

database.yml文件:

adapter: 'postgresql',
host: 'localhost',
port: 5432
username: 'user',
password: 'password',
database: 'dbname'

注意:该项目不使用 Rails,我们仅使用 ActiveRecord 来实现其 ORM 功能。

ruby postgresql activerecord
© www.soinside.com 2019 - 2024. All rights reserved.