在我的应用中,我有一个名为Get-Item -Path foo.txt
且带有Get-Item foo.txt
字段的表。此字段应存储用户通过表单发送的哈希。但是,我的数据库拒绝这些哈希,并且每次我要保存时都将此字段留空:
模式:
contacts
联系方式:
areas_of_interest
ContactsController:
create_table "contacts", force: :cascade do |t|
...
t.text "areas_of_interest"
t.index ["user_id"], name: "index_contacts_on_user_id"
end
从客户端发送的哈希看起来像这样:
class Contact < ApplicationRecord
belongs_to :user
serialize :areas_of_interest
...
end
在这里我可能会做错什么,我该如何解决?
答案 0 :(得分:1)
您的格式似乎是Ruby Hash
的转储。 serialize
使用YAML完成。看起来像这样。
{ first: "1", second: "0", third: "0", fourth: "0", fifth: "1"}
但是有更好的方法。由于您使用的是Postgres,因此可以利用Postgres JSONB并将数据作为JSON发送。序列化将为您处理,您拥有Postgres's JSON search facilities的全部功能,并且JSON是大多数语言都可以产生的标准格式。
{ "first": "1", "second": "0", "third": "0", "fourth": "0", "fifth": "1"}
create_table "contacts", force: :cascade do |t|
...
t.jsonb :areas_of_interest
t.index [:areas_of_interest], using: :gin
end
Contact
中不需要任何特殊内容。与其他任何字段一样,使用contact.areas_of_interest
,但可以使用哈希和数组。
答案 1 :(得分:1)
areas_of_interest
似乎已被strong_params
过滤掉。我认为您需要的是这样的东西,以指示应允许使用哪些键:
params.require(:contact).permit(
...
areas_of_interest: [:first, :second, :third, :fourth, :fifth],
...
)
我也强烈建议使用@Schwern提到的jsonb
类型。