【问题标题】:Ruby on Rails with Postgres Arrays带有 Postgres 数组的 Ruby on Rails
【发布时间】:2016-05-03 11:27:44
【问题描述】:

我目前遇到 Ruby on Rails (4.2.5) 和 Postgres (9.4.5) 数组的问题。模型属性认为它是一个字符串类型,在尝试分配数组时不起作用。我的迁移有:

# create a urls array
t.text :urls, array: true, default: []

然后在我的控制器中我有:

def create
  @lead = Lead.new(lead_params)
  ...
end

def lead_params
  params.require(:lead).permit(:name, :base_url, urls: [])
end

不幸的是,在使用byebug 进行调试时,我看到了:

(byebug)  lead_params['urls'].class
Array
(byebug) @lead.urls.class
String
(byebug) @lead.urls      
"[\"asd\", \"\", \"\", \"\", \"\"]"

我的 Lead 类的 :urls 属性不认为它是一个数组。我的模型中没有代码(这可能是问题所在?)。

任何想法都非常感谢!

【问题讨论】:

    标签: ruby-on-rails arrays postgresql ruby-on-rails-4


    【解决方案1】:

    您可能希望将类型从 text 更改为 string

    t.string :urls, array: true, default: []
    

    【讨论】:

    • 感谢@wizard-of-ogz 的建议......不幸的是没有骰子。我试过用字符串,它有同样的问题。
    【解决方案2】:

    感谢@muistooshort 的评论,我发现数据库架构确实是错误的。不知何故,在我所有的 Docker 智慧中,我设法使 schema.rb 与实际迁移不同步。

    现在schema.rb 正确显示:

    t.text     "urls",            default: [],              array: true
    

    一切都按预期工作:-)

    诀窍是运行以下内容:

    rake db:drop
    rake db:create
    rake db:migrate
    

    我想我之前运行了一些似乎导致问题的rake db:rest 命令。

    【讨论】:

    • 你不应该这样做。您是否查看过 PostgreSQL 中的表模式?从命令行使用psql\d leads 连接到您的数据库,以查看表的真实外观。
    • 好电话@muistooshort ...数据库错误。 urlstext 类型,而我认为它应该是 array。现在要弄清楚迁移发生了什么。
    • 您也可以使用rake db:migrate VERSION=<older migration number> 反转最近的迁移,然后使用rake db:migrate 重新运行它们。
    • 谢谢@PJSCopeland,下次会用到这个。我一直在手动修改初始迁移,这可能让我一开始就陷入困境。
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2019-02-04
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多