如何以 Rails 形式提交整数数组?
How to submit an array of integers in a Rails form?
我想知道是否有办法在 Rails 表单中添加某种输入字段,这样如果用户输入 1, 2, 3
,那么 params[:model][:attribute]
returns [1, 2, 3]
或至少 ['1', '2', '3']
,但不是 ['1, 2, 3']
.
背景:
我有一个模型 Foo
,它有一个属性 bar_ids
。该属性在 PostgresQL 数据库中的数据类型为 Array。我尝试了几种方法:
- if
f.text_field :bar_ids
then params[:foo][:bar_ids]
returns '1, 2, 3'
- if
f.text_field_tag 'foo[bar_ids][]'
then params[:foo][:bar_ids]
returns ['1, 2, 3']
- if
f.number_field :bar_ids
then params[:foo][:bar_ids]
returns '1'
如果我只输入 1
并且表格不允许输入多个数字
那么,我的问题又来了——有没有办法以这种方式构建我的表单,以便 Rails 自动将输入解析为相应的数据类型,在我的例子中是一个整数数组?
人们通常在更新模型之前手动编辑 params
:
params[:model][:attribute] = params[:model:][:attribute].split(',')
# ...
Model.update_attributes(params[:model])
通常在controller action或者before_action
中完成。
我想知道是否有办法在 Rails 表单中添加某种输入字段,这样如果用户输入 1, 2, 3
,那么 params[:model][:attribute]
returns [1, 2, 3]
或至少 ['1', '2', '3']
,但不是 ['1, 2, 3']
.
背景:
我有一个模型 Foo
,它有一个属性 bar_ids
。该属性在 PostgresQL 数据库中的数据类型为 Array。我尝试了几种方法:
- if
f.text_field :bar_ids
thenparams[:foo][:bar_ids]
returns'1, 2, 3'
- if
f.text_field_tag 'foo[bar_ids][]'
thenparams[:foo][:bar_ids]
returns['1, 2, 3']
- if
f.number_field :bar_ids
thenparams[:foo][:bar_ids]
returns'1'
如果我只输入1
并且表格不允许输入多个数字
那么,我的问题又来了——有没有办法以这种方式构建我的表单,以便 Rails 自动将输入解析为相应的数据类型,在我的例子中是一个整数数组?
人们通常在更新模型之前手动编辑 params
:
params[:model][:attribute] = params[:model:][:attribute].split(',')
# ...
Model.update_attributes(params[:model])
通常在controller action或者before_action
中完成。