在轨道上存储带有ruby的整数数组

时间:2016-03-30 20:40:22

标签: ruby-on-rails arrays ruby erb

我试图通过使用表单来接收一组数字。在我的数据库中,我有变量:

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

2 个答案:

答案 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.html7.1 Basic Structures部分

但是,仔细阅读您的情况,我认为您不需要传入数组。正如Ben在他的回答中指出的那样,你可以在保存之前解析单个字段。我建议在表单对象中进行,因为模型与解析表单数据无关。