[英]Storing an array of integers with ruby on rails
我正在尝试通过使用表单来获取数字数组。 在我的数据库中,变量为:
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的表单部分作为文本字段,并允许用户输入用逗号分隔的数字,例如:“ 23,45,52”将用数组[23,45填充home_goal_min ,52]
您有<%= 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
然而
如果我是你,我只会将此数据放入其自己的表中。 通常,除非您的数据库已经存储了许多非结构化数据,否则使用数组字段是一种不好的做法
首先,您可以通过表单传递数组。 通过在输入名称的末尾附加[]
来完成此操作。 例如,您的表单包含:
<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
节7.1 Basic Structures
但是,通读您的情况,我认为您不需要传递数组。 正如Ben在回答中指出的那样,您可以在保存之前解析一个字段。 我建议在表单对象中执行此操作,因为模型与解析表单数据无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.