【发布时间】:2018-09-17 05:29:02
【问题描述】:
我需要让 hstore 在 Rails 迁移中工作。我已经通过迁移启用了 hstore,现在,我正在尝试生成正确的 sql 以使其正常工作,但是当我运行 db:migrate 时出现此错误;
C:\Sites\Peoples_Profiles>rails db:migrate
rails aborted!
SyntaxError: C:/Sites/Peoples_Profiles/db/migrate/20180407073155_add_hstore_hash_to_urls.rb:4: syntax error, unexpected '\n', expecting =>
C:/Sites/Peoples_Profiles/db/migrate/20180407073155_add_hstore_hash_to_urls.rb:10: syntax error, unexpected end-of-input, expecting keyword_end
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
迁移看起来像这样。
class AddHstoreHashToUrls < ActiveRecord::Migration[5.0]
def self.up
change_column :users, :urls, default: {}, "hstore USING urls::hstore"
end
def self.down
change_column :users, :urls, :text
end
end
获取该列的类型集的正确 sql 是什么?为什么会出现换行错误?
更新 我的 url 像这样存储在 db 中
urls: {"url1"=>"", "url2"=>"", "url3"=>"", "url4"=>"", "url5"=>""}
所以我认为 postgres 抱怨是因为它正在尝试转换此代码..
所以在检查 rails 是如何实际引入参数后,它看起来像这样
["urls", "--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nurl1: http://hello\nurl2: http://jack\nurl3: http://boo\nurl4: ''\nurl5: ''\n"]
不幸的是,不确定它在数据库中是否看起来像这样,但我说那里有一个 \n 导致此错误。将不得不进一步追求这一点。
...我现在意识到 \n 将来自将哈希序列化为 YAML 的转换。
【问题讨论】:
-
我将尝试做一个 create_table 只是为了看看它是否只是迁移过来..
-
好的,所以如果我这样做
add_column :users, :urlss, :hstore, default: {}, null: false并添加一个新列它可以工作,所以我认为它在更改和转换格式时遇到了麻烦
标签: ruby-on-rails postgresql hstore