尝试将数组添加为Rails表单输入 - 如何使其工作?

时间:2015-05-10 22:16:06

标签: ruby-on-rails postgresql

我试图将表单输入作为数组存储在我的数据库中,但是在搜索几个小时之后还没有找到让它工作的方法。

表单包含一个文本字段,用户可以输入以逗号分隔的语言。 (例如,用户可以键入"法语,德语,西班牙语和#34;。)

在我看来,这表示为:

<%= f.label :languages_spoken, "Languages spoken" %>
<%= f.text_field :languages_spoken %>

languages_spoken字段在我的数据库中表示为Postgres数组。以下是创建它的迁移的相关剪辑:

:languages_spoken, :string, array: true, default:

但是,在表单中输入任何类型的值后,结果似乎不会保存到数据库中。

我希望我的strong_parameters可能存在问题,因为在我的输出中,lan​​guages_spoken被列为未经许可的参数。但是,我一直无法弄清楚如何确保允许该属性。

现在它在我的控制器中作为最后一个允许的属性,如下所示:

params.require(:user).permit(:first_name, :last_name, :email, { languages_spoken: [] })

我已经阅读了上面为其他人工作的语法,但对我来说,这仍然会导致languages_spoken被列为未经许可的参数。

关于如何从这里开始的任何想法?我觉得我必须遗漏一些显而易见的东西,但是尽管经常搜索,却无法弄明白。也可以通过解决方法或完全不同的方式实现相同的目标。

更新

我已经找到了一个有效的解决方案,但远非优雅。我会在这里发布,以防其他人面临类似的问题,但如果其他人有更简洁的解决方案 - 请加入。

下面的第一条评论促使我尝试将我的strong_parameters更改为

params.require(:user).permit(:first_name, :last_name, :email, :languages_spoken) 

正如所料,这确实允许使用languages_spoken属性。

我在模型中添加了一些相当粗略的逻辑,将文本输入转换为数据库作为数组接受的格式。

def languages_spoken=(value)
  language_to_input = "{" + value + "}"
  self[:languages_spoken] = language_to_input
end

这似乎可以解决用户的语言1,语言2,语言3和#34;输入可以保存为db中的数组。

0 个答案:

没有答案