activerecord默认id列问题



我想在实体中使用默认的活动记录id列。由于某种原因,ROR引擎正在发送该列的字符串值。知道为什么会这样吗?插入新数据时,应忽略id。

型号:

class SampleModel < ApplicationRecord
end

ApplicationRecord是这样的:

class ApplicationRecord < ActiveRecord::Base
include Helpers::Model
self.abstract_class = true
class IdType < ActiveRecord::Type::Value
def cast(value)
value.class == BSON::ObjectId ? value.to_s : value
end
def serialize(value)
value.to_s if value
end
end
attribute :id, IdType.new
attribute :account_id, IdType.new
attribute :affiliated_account_id, IdType.new
attribute :content_order_id, IdType.new
attribute :project_id, IdType.new
class << self
def group_by_id
all.group_by(&:id).transform_values(&:first)
end
end
end

下面是ApplicationRecord中包含的助手模块:

module Helpers
module Model
extend ActiveSupport::Concern
W_AUTO_ATTRIBUTES = %w[id _id _type type created_at updated_at deleted_at version_1_id]
end
end
Mongoid::Document.send(:include, Wordapp::Helpers::Model)
Mongoid::Document.send(:include, Mongoid::Attributes::Dynamic)

迁移如下所示:

class CreateSampleModels < ActiveRecord::Migration[5.2]
def change
create_table :sample_models do |t|
t.string :title, null: false
t.string :description, null: false
t.timestamps
end
end
end

数据库模式:

CREATE TABLE public.sample_models
(
id bigint NOT NULL DEFAULT nextval('sample_models_id_seq'::regclass),
title character varying COLLATE pg_catalog."default" NOT NULL,
description character varying COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT sample_models_pkey PRIMARY KEY (id)
)

创建时出错:

SampleModel.create(title: 'sample', description: 'sample')

PG::InvalidTextRepresentation - ERROR:  invalid input syntax for type bigint: "60d33fc29dc7938a6a355d63"
SampleModel Create (0.8ms)  INSERT INTO "sample_models" ("id", "title", "description", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["id", "60d33fc29dc7938a6a355d63"], ["title", "test"], ["description", "test"], ["created_at", "2021-06-23 14:05:54.192075"], ["updated_at", "2021-06-23 14:05:54.192075"]]

请参阅下面的Gemfile。提供gemfile是因为可能是某些gem造成了麻烦:

source 'https://rubygems.org'
gem 'rails', '5.2.3'
# gem 'attr_reader :attr_namesack-timeout'
gem 'rack-cors', require: 'rack/cors'
#i18n
gem 'i18n-tasks', '~> 0.9.20'
gem 'rails-i18n', '5.0.0'
gem 'i18n-js', '~> 3.0.0.rc11'
gem 'twitter_cldr', '4.4.2', require: true
# Monitoring
gem 'rollbar', '~> 2.13.2'
gem 'yomu', '~> 0.1.5'
# DB
gem 'pg'
gem 'pg_search'
gem 'ransack', '~> 2.1.1'
gem 'mongoid', '6.2.0'
gem 'paranoia', '2.4.1'
gem 'mongoid_paranoia', github: 'simi/mongoid_paranoia', branch: 'b00af0eae33cc12443ec83f2d43d6da430353006'
gem 'has_scope', '~> 0.5.1'
gem 'simple_enum', '~> 2.1.1', require: 'simple_enum/mongoid'
gem 'redis-rails'
# Auth
gem 'doorkeeper', '~> 4.0'
gem 'devise', '~> 4.4.0'
gem 'cancancan', '~> 1.10'
gem 'omniauth-facebook', '~> 5.0.0'
gem 'omniauth-google-oauth2', '~> 0.5.3'
# Backend
gem 'jbuilder', '~> 2.0'
gem 'kaminari', '~> 1.1.1'
gem 'kaminari-mongoid', '~> 1.0.1'
gem 'money-rails', '~> 1.9.0'
gem 'email_validator', '~> 1.4.0'
gem 'apipie-rails', '0.5.4'
gem 'reverse_markdown', '1.0.3'
gem 'valvat', github: 'yolk/valvat', tag: 'v0.7.4'
gem 'stripe', '4.21.3'
# HTTP client utils
gem 'faraday', '~> 0.12'
gem 'typhoeus', '~> 0.7.1'
# IDN punnycode to unicode conversion
# depricated. use Addressable::IDNA.to_unicode() instead
# gem 'simpleidn', '~> 0.0.7'
# Cron Manager
gem 'clockwork', '1.2.0'
gem 'daemons'
# File uploading
gem 'carrierwave-mongoid' , '~> 0.10.0', require: 'carrierwave/mongoid'
# AWS
gem 'carrierwave-aws', '~> 1.0.2'
gem 'aws-sdk', '~> 2.5.6'
# Sidekiq
gem 'sidekiq', '~> 4.0.1'
gem 'sidekiq-delay', '~> 1.0.5'
gem 'sidekiq-status', '~> 1.0.1'
gem 'sinatra', '~> 2.0.0.beta2', require: nil
# gem 'devise-async', '~> 0.10.2'
# File import/export utilites
gem 'pandoc-ruby', '~> 0.7.5', require: 'pandoc-ruby'
gem 'wicked_pdf', '~> 1.1.0'
gem 'wkhtmltopdf-binary'
# Copyscape
gem 'copyscape', github: 'zeitnot/copyscape-rb'
# Frontend
gem 'maruku', '~> 0.7.2'
gem 'haml', '5.0.4'
gem 'haml-rails', '~> 1.0'
gem 'bootstrap-sass', '~> 3.1.1.1'
#gem 'font-awesome-sass', '~> 4.5.0'
gem 'font-awesome-rails', '~> 4.7.0'
gem 'sass-rails', '>= 5.0.1'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2.1'
gem 'jquery-rails', '~> 4.2.1'
gem 'bower-rails', '~> 0.10.0'
gem 'angular-rails-templates', '~> 1.0.2'
# Image util
gem 'fastimage', '~> 1.8.1'
gem 'faker', '~> 1.4.3', require: false, group: [:staging,:development, :test, :beta]
gem 'mandrill-api'
# for table prints (alpay added)
gem 'table_print'
gem 'hirb'
gem 'awesome_print'
# Servers
gem 'rack', '2.0.1'
gem 'puma', '3.12.1'
gem 'rubyzip', '1.2.1', require: false
# Google API
gem 'googleauth', '~> 0.6.2'
gem 'google-cloud-translate'
gem 'google-adwords-api', '~> 1.3.1'
# gem 'google-ads-googleads'
gem 'google-api-client', '~> 0.8'
gem 'google_drive'
gem 'hotwater', require: false
group :production, :staging, :beta do
gem 'asset_sync', '~> 1.0.0'
end
group :development do
gem 'annotate'
#gem 'guard-bundler', '~> 2.1.0'
gem 'guard-rake', '~> 1.0.0'
gem 'guard-rspec', '~> 4.6.4'
#  gem 'guard-brakeman', '~> 0.8.1'
gem 'guard-pow', '~> 2.0.0'
gem 'guard-rubocop', '~> 1.0.2'
gem 'guard-teaspoon', '~> 0.8.0'
gem 'better_errors', branch: 'master', github: 'charliesome/better_errors'
gem 'rubocop', '~> 0.26.1', require: true
gem 'brakeman', '~> 4.1.1', require: false
gem 'spring'
gem 'spring-commands-rspec'
gem 'binding_of_caller', '0.8.0'
gem 'capistrano', '~> 3.7.0',           require: false
gem 'capistrano-rails', '~> 1.1.2',     require: false
gem 'capistrano-rvm', '~> 0.1.1',       require: false
gem 'capistrano-bundler', '~> 1.1.3',   require: false
gem 'capistrano-sidekiq', '~> 0.5.4',   require: false
gem 'capistrano-maintenance', '~> 1.0', require: false
gem 'capistrano3-puma', '3.1.1',        require: false
gem 'yard',           require: false
gem 'redcarpet',      require: false
gem 'github-markup',  require: false
gem 'bullet', '~> 5.7.2'
end
group :development, :test do
gem 'pry-rails', '~> 0.3.2'
gem 'factory_girl_rails', '~> 4.7.0'
gem 'teaspoon-mocha', '~> 2.3.3'
gem 'colorize'
gem 'selenium-webdriver'
gem 'benchmark-ips'
end
group :test do
gem 'database_cleaner'
gem 'rspec-rails', '~> 3.8'
gem 'rails-controller-testing'
gem 'mongoid-rspec', github: 'zeitnot/mongoid-rspec'
gem 'rainbow', '2.2.2' # TODO: This is here owing the codeship's failing tests.
gem 'shoulda-matchers', '~> 2.6.1'
gem 'json_spec', '~> 1.1.4'
gem 'api_matchers', '~> 0.6.2'
gem 'airborne', '~> 0.2.13'
gem 'simplecov', '~> 0.15.0', require: false
gem 'simplecov-console', '~> 0.4', require: false
gem 'email_spec', '~> 1.6.0'
gem 'rspec-sidekiq', '~> 1.0.0'
gem 'rspec-collection_matchers', '~> 1.1.2'
gem 'capybara', '~> 2.15.1'
gem 'poltergeist', '~> 1.16.0'
gem 'webmock', '~> 3.4.2'
gem 'vcr', '5.0.0'
end

您有gemspg(用于postgres(和其他一些用于Mongoid 的gems

你的申请记录包括吗

include Mongoid::Document
include Mongoid::Ids

因为在我看来,ActiveRecord正在使用postgres作为适配器,但生成的ID来自Mongoid::Document或Mongoid:

最新更新