【问题标题】:How add hash-key in form field如何在表单字段中添加哈希键
【发布时间】:2015-01-29 08:24:59
【问题描述】:

我有一个模型属性“选项”,我想记录一个带有一些参数的哈希值。例如:

options:
    name: 'username'
    address: 'useraddress'
    age: 'userage'

为此,我使用序列化

  serialize :options, Hash

如何制作正确的表格以使其正常工作

怎么弄的?

对不起我的英语不好

【问题讨论】:

    标签: ruby-on-rails serialization


    【解决方案1】:

    在模型中使用

     serialize :options
    

    当您将 options 保存到 db 时,请执行以下操作:

    object.options = {name: 'username', address: 'useraddress', age: 'userage'}
    object.save # in database it will save hash as string, but serialize it.
    

    当您从db 读取options 时,

    opt = User.first.options # ou will get Hash object
    # opt = {name: 'username', address: 'useraddress', age: 'userage'}
    # opt is now a Ruby Hash object
    

    在您看来,您必须添加 3 个输入字段

    <input type='text' name='user[options_name]'>
    <input type='text' name='user[options_address]'>
    <input type='text' name='user[options_age]'>
    

    在您的控制器中,您将拥有

    params[:user][:options_name], params[:user][:options_address], params[:user][:options_age]
    

    使用这 3 个变量来设置你的选项字段的值,但将其设置为 Hash

    【讨论】:

    • mm,我似乎解释得不好。我知道如何从 irb 编写它,我想从带有 'form_for' 助手的视图中制作它
    • 您需要在服务器端处理逻辑,但解决方案很少
    • 解决办法是什么?
    【解决方案2】:

    这样解决了这个问题

    用表单查看

    = form_for @user do |f|
      = f.fields_for :options do |o|
        = o.text_field :username, class: "form-control", placeholder: "Name"
        = o.text_field :useraddress, class: "form-control", placeholder: "Say your price"
        = o.text_field :useraddress, class: "form-control", placeholder: "Enter your address"
    

    允许控制器中的参数

    def user_params
      params.require(:user).permit(:email, options: [:name, :price, :address])
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多