2016-03-30 7 views
1

私はフォームを使って数値の配列を取得しようとしています。私のデータベースでは、私は、変数を持っているように:私はまた、配列としてパラメータで追加が、これはまだ私の問題を解決していない私のコントローラでルビを使った整数配列の格納

<%= 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 %> 

私は私のフォームで
t.integer "home_goal_min", default: [], array: true 

:私はフォームを使用してデータを入力するとき

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"はhome_goal_minに配列を入力します[23,45,52]

答えて

1

あなたはそれが<%= p.number_field :home_goal_min %>すべきではない<%= f.number_field :home_goal_min %>

てきましたか?

編集:

私はJavaScriptを使用せずにフォームを使用して配列を提出することができるとは思いません。私があなただったら、私はちょうどそれ自身の中に、このデータになるだろうもつとも

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 

形で:

<%= f.text_field :home_goal_mins_list, placeholder: "A comma-separated list of times of the goals" %> 

モデルではここで最も簡単な解決策です表。お使いのデータベースがすでに非構造化データを大量に保存されていない限り、一般的には、フォームを通して、アレイ内のあなたができパス、

+0

私は '<%= form_for([@league、@team、@ fixture、@result])のようにフォームを持っています。 %> 'それはf.number_fieldとしてそれを使用する必要がありますか? – kjs123

+1

いいえ、 'fields_for'ブロック内では、ブロック内に作成されたフィールドオブジェクトを使用する必要があります。さもなければ、そのブロックの中のフィールドがあなたが変更しようとしている属性の 'fields_for'にあるはずであることを知る方法はありません。 –

+0

それは意味があります。私がp.number_fieldを使うように変更すると、[]:Array'のために '未定義のメソッド 'home_goal_min'というエラーが出ます。私はhome_goal_minを正しい方法で使用していますか? – kjs123

1

まず配列フィールドを使用するには、悪い習慣です。 入力の末尾に[]を追加して行います。 は、たとえば、フォームが含まれています

params[:home_goal_min] => ['100', '200', '300'] 

ここドキュメント:: http://guides.rubyonrails.org/v3.2.9/form_helpers.html 節しかし7.1 Basic Structures

、自分の状況を読んフォームの送信時に

<input name='home_goal_min[]' value='100'> 
<input name='home_goal_min[]' value='200'> 
<input name='home_goal_min[]' value='300'> 

を、あなたのparamsは次のようになります私はあなたが配列を渡す必要はないと思う。 Benが答えてくれたように、保存する前に1つのフィールドを解析することができます。モデルはフォームデータの解析とは関係がないため、フォームオブジェクトで行うことをお勧めします。

関連する問題