我试图将表单输入作为数组存储在我的数据库中,但是在搜索几个小时之后还没有找到让它工作的方法。
表单包含一个文本字段,用户可以输入以逗号分隔的语言。 (例如,用户可以键入"法语,德语,西班牙语和#34;。)
在我看来,这表示为:
<%= f.label :languages_spoken, "Languages spoken" %>
<%= f.text_field :languages_spoken %>
languages_spoken字段在我的数据库中表示为Postgres数组。以下是创建它的迁移的相关剪辑:
:languages_spoken, :string, array: true, default:
但是,在表单中输入任何类型的值后,结果似乎不会保存到数据库中。
我希望我的strong_parameters可能存在问题,因为在我的输出中,languages_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中的数组。