Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用rails表单和jsonb postgres_Ruby On Rails_Json_Postgresql_Ruby On Rails 4_Jsonb - Fatal编程技术网

Ruby on rails 如何使用rails表单和jsonb postgres

Ruby on rails 如何使用rails表单和jsonb postgres,ruby-on-rails,json,postgresql,ruby-on-rails-4,jsonb,Ruby On Rails,Json,Postgresql,Ruby On Rails 4,Jsonb,我正在考虑在Rails4.2和Postgres4.1中使用新的jsonb功能 我正在考虑创建一个表示用户配置文件(即技能集等)的模型,并将整个内容存储在单个jsonb数据集中 因此,该表将有: id int profile jsonb timestamps 我想我基本上可以将所有概要文件数据存储在jsonb结构中,如下所示(这只是一个示例/概念): 我的问题是如何创建一个基本rails表单来写入/读取这个结构?我了解如何处理传统的关系表集,但不知道如何处理这些表,因为它们都可以进入如下所示的灵

我正在考虑在Rails4.2和Postgres4.1中使用新的jsonb功能

我正在考虑创建一个表示用户配置文件(即技能集等)的模型,并将整个内容存储在单个jsonb数据集中

因此,该表将有:

id int
profile jsonb
timestamps
我想我基本上可以将所有概要文件数据存储在jsonb结构中,如下所示(这只是一个示例/概念):

我的问题是如何创建一个基本rails表单来写入/读取这个结构?我了解如何处理传统的关系表集,但不知道如何处理这些表,因为它们都可以进入如下所示的灵活结构

在_form.html.erb和控制器的新建/创建/编辑操作中会发生什么情况?

使用。表单数据只是一个
散列
,可以轻松地转换为
JSON
对象,并在postgresql中持久化,而不会出现重大问题

假设您的表单以
profile[]
hash格式提交所有概要文件数据,并且您的模型如下所示:

class User < ActiveRecord::Base
  has_one :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
  store_accessor :profile
end
class MyModel < ApplicationRecord
    store :my_jsonb_field_name, accessors: [:property1, :property2]
end

在您的控制器(或其他任何地方)中,它应该可以工作。

我不知道以前的版本,但在Rails 6中,从文档:

您可以像这样使用存储:

class User < ActiveRecord::Base
  has_one :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
  store_accessor :profile
end
class MyModel < ApplicationRecord
    store :my_jsonb_field_name, accessors: [:property1, :property2]
end

我也有同样的情况。你找到解决办法了吗?太棒了!有什么缺点或问题需要注意吗?@cman77 Rails在你不知道的情况下为你做了大量的序列化/反序列化。和Rails一样,当它工作时看起来像魔术,但可能会引起一些麻烦。注意非常规数据结构。但是,所有可以安全序列化为JSON的东西都应该可以正常工作。很好!这也适用于Rails 5.0
params.require(:my_model).permit(:title, [...], :property1, :property2)