带有Postgres数组的Ruby on Rails

时间:2016-01-26 18:57:14

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

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

# 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属性并不认为它是一个数组。我的模型中没有代码(这可能是问题?)。

任何想法都非常感激!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

现在schema.rb正确显示:

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

一切都按预期工作: - )

诀窍是运行以下内容:

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

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