1

我的一个模型中有一个属性列,

并且Attributes column是 hstore 类型,它存储 JSON 格式字符串,

我希望我的用户以普通表单类型对其进行编辑,

我希望它可以自动跨越到 4 个输入字段,

name

range

security

default_value

有什么宝石可以实现吗?

在此处输入图像描述

更新

我遵循@zwippie 解决方案,并以正确的形式显示它,

但是不能更新,

当我尝试更新它时,

但我应该将这些字段添加到强参数中,

有没有动态的方法来实现这一点。

扩展 hstro 中的所有列而不是硬代码store_accessor :cgi_attributes, :name, :range, :security, :default_value,并将其附加到白名单中

= f.text_area column, class: 'input-xxlarge' 

但它

4

3 回答 3

1

Rails 4 可以开箱即用地做到这一点。将此添加到您的模型中:

store_accessor :attributes, :name, :range, :security, :default_value

现在您可以将 hstore 属性用作普通的 Active Record 属性:

item = Item.find(2)
item.update(security: '5/6')

或以一种形式:

<%= f.text_field :default_value %>
于 2014-05-21T07:59:47.247 回答
0

我认为没有宝石可以实现它,但它仍然可以使用元编程。

使用元编程,您可以根据对象的数据动态创建方法。我在这里为序列化数据解释了它,这很可能适合您的情况。

您需要扩展的是视图,但这不是一个问题,您可以简单地调用一个返回序列化数据的所有键的方法,然后遍历它们并生成输入。

于 2014-05-21T07:56:33.787 回答
0

如果您在应用程序中使用 postgresql 数据库,我猜PostgreSQL hstore可能会很有用。

于 2014-10-20T13:52:10.883 回答