Ruby on rails 如何使用rails表单和jsonb postgres
我正在考虑在Rails4.2和Postgres4.1中使用新的jsonb功能 我正在考虑创建一个表示用户配置文件(即技能集等)的模型,并将整个内容存储在单个jsonb数据集中 因此,该表将有: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表单来写入/读取这个结构?我了解如何处理传统的关系表集,但不知道如何处理这些表,因为它们都可以进入如下所示的灵
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)