Rails——强参数——字符串数组列——形式
Rails - strong parameters - string array column - form
表单和控制器中的字符串数组
我正在使用 Rails 5 和 Ruby 2.3.1
我无法弄清楚如何让表单允许我将字符串添加到我的一个模型上的数组,数组中的每个元素都有一个输入字段。为了更新现有记录,我希望当时数组中的每个元素都有一个单独的输入字段。
我希望新记录的表单允许我使用单独的输入字段为我决定添加的每个元素添加一个或多个元素到此数组。
我该怎么做?我可以使用 jquery 添加输入,但我不知道如何使用 rails 表单生成器 class 来执行此操作。
该列只是一个字符串数组。
以下是当前无法使用的内容:
<!-- _form.html.erb -->
...
<%= f.label :details %>
<% @project.details&.each do |detail| %>
<%= f.text_field :details,
name: 'details[]',
class: 'form-control',
value: detail %>
<% end %>
...
这是我控制器中的内容:
...
private
def thing_params
params.require(:thing).permit(..., details: [])
end
...
此时,如果我中断创建控制器操作并检查参数,params[:details]
对象具有我所期望的(字符串数组)。但是,如果我只打印 params
,permitted
是假的,如果我打印 thing_params
,details
不包含在散列中。
有人看到我做错了什么吗?
我也怀疑使用 name: 'details[]'
的形式是错误的,感觉如果我走到那一步,只有最后一个会进来...
难道你不喜欢整天尝试解决问题,在认输后花大量时间写一个 Whosebug 问题,5 分钟后才弄明白吗?我当然会。
需要更改的是我在表格中输入的内容:
<!-- _form.html.erb -->
...
<%= f.label :details %>
<% @project.details&.each do |detail| %>
<%= f.text_field :details,
# name: 'details[]', (this is what I had before)
name: 'thing[details][]',
class: 'form-control',
value: detail %>
<% end %>
...
表单和控制器中的字符串数组
我正在使用 Rails 5 和 Ruby 2.3.1
我无法弄清楚如何让表单允许我将字符串添加到我的一个模型上的数组,数组中的每个元素都有一个输入字段。为了更新现有记录,我希望当时数组中的每个元素都有一个单独的输入字段。
我希望新记录的表单允许我使用单独的输入字段为我决定添加的每个元素添加一个或多个元素到此数组。
我该怎么做?我可以使用 jquery 添加输入,但我不知道如何使用 rails 表单生成器 class 来执行此操作。
该列只是一个字符串数组。
以下是当前无法使用的内容:
<!-- _form.html.erb -->
...
<%= f.label :details %>
<% @project.details&.each do |detail| %>
<%= f.text_field :details,
name: 'details[]',
class: 'form-control',
value: detail %>
<% end %>
...
这是我控制器中的内容:
...
private
def thing_params
params.require(:thing).permit(..., details: [])
end
...
此时,如果我中断创建控制器操作并检查参数,params[:details]
对象具有我所期望的(字符串数组)。但是,如果我只打印 params
,permitted
是假的,如果我打印 thing_params
,details
不包含在散列中。
有人看到我做错了什么吗?
我也怀疑使用 name: 'details[]'
的形式是错误的,感觉如果我走到那一步,只有最后一个会进来...
难道你不喜欢整天尝试解决问题,在认输后花大量时间写一个 Whosebug 问题,5 分钟后才弄明白吗?我当然会。
需要更改的是我在表格中输入的内容:
<!-- _form.html.erb -->
...
<%= f.label :details %>
<% @project.details&.each do |detail| %>
<%= f.text_field :details,
# name: 'details[]', (this is what I had before)
name: 'thing[details][]',
class: 'form-control',
value: detail %>
<% end %>
...