Ruby on Rails ERB表格用于Postgres Hstore中的哈希或字段

时间:2018-01-09 01:41:58

标签: ruby-on-rails postgresql erb hstore

在我的ruby on rails项目中,我使用名为plugin_settings的Postgres https://www.youtube.com/watch?v=YWRYbLKsS0I字段来动态存储我所有插件设置的哈希值。这样,如果编写了一个新插件,则不需要编写任何迁移,以便在我的ActiveRecord对象上保存插件设置。哈希目前是PluginKey:{Plugin Settings}。

这是我的迁移:

class AddHStorePluginSettingsToProject < ActiveRecord::Migration[5.1]
  def change
    enable_extension 'hstore'
    add_column :projects, :plugin_settings, :hstore
    add_index :projects, :plugin_settings, using: :gist
  end
end

然后每个插件定义它自己的设置,这是Build插件的一个例子。

def settings
  settings_list = [
    {
        key: 'url',
        value: '',
        display_name: 'Url',
        placeholder: "Add a url ..."
    }
  ]

  Hash[:build_plugin_settings, settings_list]
end

所以这里我有一个名为url的设置以及一些帮助我显示表单的属性。

我正在尝试创建一个动态ERB表单,它将遍历我的插件并为每个设置创建字段,然后将其保存回我的hstore字段plugin_settings(或者我可以在表单提交后保存的哈希)这是我现在拥有的:

<% plugins.keys.each do |plugin_key| %>
  <fieldset>
    <legend><%= plugin_key %></legend>
    <div class="form-group">
      <div class="form-group">
        <% plugins[plugin_key].project_settings.each do |plugin_settings| %>
          <% setting_list = plugin_settings.second %>
          <% setting_list.each do |setting| %>
            <label><%= setting[:display_name] %></label>
            <%= text_field_tag "plugin_settings[#{plugin_key}][]", setting_list[:value], class: 'form-control', placeholder: setting[:placeholder], style: 'width:500px' %>
          <% end %>
        <% end %>
      </div>
    </div>
  </fieldset>
<% end %>

我遇到的问题是我的哈希值完全被值替换,而不是保留其他字段,例如keyplaceholder。我希望仅更新value字段来存储整个哈希值(您可以在settings方法中看到它当前为空)。

我可以创建一个通过params发送的新哈希,如下所示:hstore。但它不会发送我的整个哈希值,而是取代它。我只是更新value字段,然后在表单提交后将整个哈希发送回我的控制器。

非常感谢任何帮助。

0 个答案:

没有答案