Я вижу некоторые вещи, которые вы можете сделать:
Таблицы:
В своей миграции вы можете изменить имя таблицы, но теперь вам нужно разрешитьмодель знает, что такое имя таблицы с self.table_name
.
# migration
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :post do |t| # singular 'post'
...
end
end
end
#model
class Post
self.table_name = "post" # i think you can also use a symbol :post
end
Атрибуты:
Необходимо избегать использования методов миграции Rails, которые следуютСоглашения Rails, такие как t.belongs_to
или t.references
или t.timestamps
.
# migration
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :post do |t|
# do not use this below
# t.belongs_to :site, null: false
t.bigint :siteId, null: false
t.string :title
t.string :url
t.text :body
# do not use this below
# t.timestamps
t.datetime :createdAt, default: ->{'CURRENT_TIMESTAMP'}
t.datetime :updatedAt, default: ->{'CURRENT_TIMESTAMP'}
end
end
end
Отношения:
Вам также необходимо обновить ваши отношения в ваших моделях
class Post
belongs_to :site, foreign_key: 'siteId'
end
Дополнительную информацию можно найти в Rails API . Убедитесь, что вы проверили документацию для других методов отношений .
Метки времени:
Поскольку столбцы меток времени (created_at
, updated_at
)больше не ожидаемый ActiveRecord, вам может понадобиться переопределить ActiveRecord::Timestamp
модуль , чтобы они продолжали работать так, как вы ожидаете. Один из самых простых вариантов - обновить ApplicationRecord
или класс отдельной модели следующим образом:
class ApplicationRecord # or class Post
before_create :set_timestamps
before_save :set_timestamps
private
def set_timestamps
self.createdAt = DateTime.current if self.new_record?
self.updatedAt = DateTime.now
end
end
Или этот другой параметр взят из https://stackoverflow.com/a/52276865/1845602
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
class << self
private
def timestamp_attributes_for_create
super << 'my_created_at_column'
end
def timestamp_attributes_for_update
super << 'my_updated_at_column'
end
end
end
Автоматически сгенерированные входы :
Я могу ошибаться, но кажется, что имя таблицы вводится во имя ввода, например Create<table>Input
, поэтому, если это так, вы можете назвать свою таблицу Post
вместо post
.
input CreatepostsInput {
}