繁体   English   中英

在Rails上使用ruby存储整数数组

[英]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.html7.1 Basic Structures7.1 Basic Structures

但是,通读您的情况,我认为您不需要传递数组。 正如Ben在回答中指出的那样,您可以在保存之前解析一个字段。 我建议在表单对象中执行此操作,因为模型与解析表单数据无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM