Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 使用postgre hstore使用json数据呈现表单_Ruby On Rails_Metaprogramming_Postgresql 9.2_Form For_Ruby On Rails 4.1 - Fatal编程技术网

Ruby on rails 使用postgre hstore使用json数据呈现表单

Ruby on rails 使用postgre hstore使用json数据呈现表单,ruby-on-rails,metaprogramming,postgresql-9.2,form-for,ruby-on-rails-4.1,Ruby On Rails,Metaprogramming,Postgresql 9.2,Form For,Ruby On Rails 4.1,我的一个模型中有一个属性列 而属性列是hstore类型,它存储JSON格式字符串 我希望我的用户以普通格式编辑它 我希望它能自动跨越4个输入字段 name 范围 安全性 默认值 有什么宝石可以实现它吗 更新 我遵循@zwippie解决方案,并在表单中正确显示 但它无法更新 当我试图更新它时 但我应该将这些字段添加到强参数中 是否有任何动态的方法来实现这一点 要展开hstro中的所有列,而不是硬代码存储访问器:cgi\u属性,:名称,:范围,:安全性,:默认值, 并将其附加到白名单中 = f.t

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

属性列
是hstore类型,它存储JSON格式字符串

我希望我的用户以普通格式编辑它

我希望它能自动跨越4个输入字段

name

范围

安全性

默认值

有什么宝石可以实现它吗

更新 我遵循@zwippie解决方案,并在表单中正确显示

但它无法更新

当我试图更新它时

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

是否有任何动态的方法来实现这一点

要展开hstro中的所有列,而不是硬代码
存储访问器:cgi\u属性,:名称,:范围,:安全性,:默认值
, 并将其附加到白名单中

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

但是它

我认为没有一个宝石可以实现它,但是使用元编程仍然是可能的

使用元编程,您可以基于对象的数据动态创建方法。我解释了序列化数据,这很可能与您的情况有关


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

Rails 4可以立即完成此操作。将此添加到您的模型中:

store_accessor :attributes, :name, :range, :security, :default_value
现在,您可以将hstore属性用作普通活动记录属性:

item = Item.find(2)
item.update(security: '5/6')
或以以下形式:

<%= f.text_field :default_value %>


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

我遵循了您的解决方案,但仍然存在一些问题,我更新了我的帖子,感谢您的支持:)@newBike,我知道这是旧的,但如果其他人看到,请确保更新您的强参数以接受存储访问器。