如何在表单字段中添加hash-key

时间:2015-01-29 08:24:59

标签: ruby-on-rails serialization

我有一个模型属性'options',我希望用一些参数记录它。例如:

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

为此,我使用序列化

  serialize :options, Hash

如何为此工作制作正确的表格

如何制作?

抱歉我的英文不好

2 个答案:

答案 0 :(得分:0)

在模特使用中

 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.

当您从options阅读db时,

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

答案 1 :(得分:0)

像这样解决了这个问题

以表格

查看
= 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