Rails jsonb with store_accessor使用多个具有相同子字段名称的字段

时间:2017-11-16 11:52:09

标签: ruby-on-rails ruby activerecord

我正在使用Rails 5.1.4和Postgresql 9.6,我确实有一个名为Car的模型带有一些jsonb字段,但那些jsonb字段有相同的子字段名称,例如加速有子字段[汽油,乙醇,柴油]和max_speed也有[汽油,乙醇,柴油],电源和扭矩也有这些相同的子字段,我想知道如何创建一个编辑表单以及如何使用store_accessor。

2 个答案:

答案 0 :(得分:0)

我得到了它,而不是使用store_accessor我使用fields_for和OpenStruct来编辑数据......

<%= f.fields_for :power, OpenStruct.new(@car.power) do |power| %>

然后字段就像:

<%= power.text_field :gasoline %> <%= power.text_field :ethanol %>

对max_speed,加速度和扭矩等其他领域也这样做。

答案 1 :(得分:0)

我写了一个宝石,看来可以解决您的问题。 参见:https://github.com/yfxie/json_attribute

在您的情况下,假设json_attributecars表中的json类型列,然后添加所需的所有属性:

class Car < ApplicationRecord
  has_json_attribute :acceleration_gasoline
  has_json_attribute :acceleration_ethanol
  has_json_attribute :acceleration_diesel
  has_json_attribute :max_speed_gasoline
  has_json_attribute :max_speed_ethanol
  has_json_attribute :max_speed_diesel
end

视图中:

<%= form_for(car_instance) ... do |f| %>
  <%= f.text_field :acceleration_gasoline %>
  <%= f.text_field :acceleration_ethanol %>
  ...
<% end %>

希望对您有帮助。