我试图通过使用表单来接收一组数字。在我的数据库中,我有变量:
t.integer "home_goal_min", default: [], array: true
在我的表格中,我有:
<%= f.label :minutes_of_home_team_goals %>
<%= f.fields_for 'home_goal_min[]', [] do |p| %>
<%= f.number_field :home_goal_min %>
<%= f.number_field :home_goal_min %>
<% end %>
在我的控制器中,我还将参数添加为数组,但这仍然没有解决我的问题:
def result_params
params.require(:result).permit(:home_result, :away_result, {:home_goal_min => []}, {:away_goal_min => []})
end
但是,当我使用表单并输入数据时,我会继续通过控制台检查数据库,但它仍然显示为空,我只是得到: home_goal_min:[]
我想知道我需要做些什么来将表格中输入的数字保存在数据库中?
还有一种快速方法可以将home_goal_min的表单部分作为文本字段,并允许用户输入用逗号分隔的数字,例如:&#34; 23,45,52&#34;将使用数组[23,45,52]
填充home_goal_min答案 0 :(得分:1)
您有<%= f.number_field :home_goal_min %>
不应该是<%= p.number_field :home_goal_min %>
吗?
编辑:
我不认为您可以在不使用javascript的情况下通过表单提交数组。这是最简单的解决方案:
表格形式:
<%= f.text_field :home_goal_mins_list, placeholder: "A comma-separated list of times of the goals" %>
在模型中:
def home_goal_mins_list=(value)
self.home_goal_mins = value.split(",").map(&:strip)
end
def home_goal_mins_list
self.home_goal_mins.map(&:to_s).join(", ")
end
无论其
如果我是你,我会把这些数据放到自己的表中。通常,使用数组字段是不好的做法,除非您的数据库已经存储了大量非结构化数据
答案 1 :(得分:1)
首先, 可以 通过表单传入数组。
这是通过将[]
附加到输入名称的末尾来完成的。
例如,您的表单包含:
<input name='home_goal_min[]' value='100'>
<input name='home_goal_min[]' value='200'>
<input name='home_goal_min[]' value='300'>
提交表单后,您的参数将如下所示:
params[:home_goal_min] => ['100', '200', '300']
这里的文件:
http://guides.rubyonrails.org/v3.2.9/form_helpers.html
第7.1 Basic Structures
部分
但是,仔细阅读您的情况,我认为您不需要传入数组。正如Ben在他的回答中指出的那样,你可以在保存之前解析单个字段。我建议在表单对象中进行,因为模型与解析表单数据无关。