【问题标题】:render form with json data using postgre hstore使用 postgre hstore 呈现带有 json 数据的表单
【发布时间】:2014-05-21 07:31:00
【问题描述】:

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

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' 

但它

【问题讨论】:

    标签: ruby-on-rails metaprogramming postgresql-9.2 form-for ruby-on-rails-4.1


    【解决方案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 %>
    

    【讨论】:

    • 我跟着你解决了,但还是有一些问题,我更新了我的帖子,谢谢你的支持:)
    • @newBike,我知道这是旧的,但如果其他人看到这个,请确保更新您的强参数以接受 store_accessors。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 1970-01-01
        • 2013-10-14
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多