我正在使用 Rails 运行 Postgres 版本 9.3.4.2。我迁移了数据库并tsvector
从模型中删除了该列Post
(并将其添加到Message
)。现在,当我create
尝试执行 Post 控制器的操作时,INSERT INTO "posts"
我收到一条错误消息"tsvector column 'tsv_body' does not exist"
。Schema 没有tsvector
显示posts
. 我已经重新启动了服务器和 Postgres。这是怎么回事?我想从技术上讲,错误消息是正确的 - 该tsvector
列tsv_body
不存在!这不是故意的。但是为什么它首先要在模型中寻找一tsvector
列呢?Post
编辑
好的,我在 Railscasts ep 的末尾找到了这个。343.我认为问题是由这段代码引起的:
class AddTsvectorSearchToPosts < ActiveRecord::Migration[5.1]
def change
# Adds a tsvector column for the body
add_column :posts, :tsv_body, :tsvector
# Adds an index for this new column
execute <<-SQL
CREATE INDEX index_posts_tsv_body ON posts USING gin(tsv_body);
SQL
# Updates existing rows so this new column gets calculated
execute <<-SQL
UPDATE posts SET tsv_body = (to_tsvector('english', coalesce(content, '')));
SQL
# Sets up a trigger to update this new column on inserts and updates
execute <<-SQL
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
ON posts FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(tsv_body, 'pg_catalog.english', content);
SQL
end
end
显然,schema.rb
当有 sql 迁移时,该文件是不完整的。所以现在的问题变成了:如何编写迁移来撤消这段代码?