簡體   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