どうした?
前回の記事同様、ToDoアプリを作成しています。
Todoの投稿フォームを複数個作成し、同時に投稿する方法を学んだのでそのアウトプットです。
目標物の確認
Todo.content
同士は異なるレコードです。
ボタンひとつで複数のレコードをいっぺんに作成します。
方法
コントローラ
def index
# 略
@category = Category.new
2.times { @category.todos.build }
end
今回はインデックスページでnew
していること, 親モデルのCategory
と同時にcreateすることに注意してください。
ポイントとなるのは2.times { @category.todos.build }
の部分です。
これにより、ビューページでTodo.content
用のフォームを表示する指示を与えたときに3つのフォームが作成されます。
作成されたフォームのHTML属性を見てみよう
作成されたフォームのHTML属性を見てみます。
各フォームのname
属性が以下のようになっていることに気づくでしょう。
category[todos_attributes][0][content]
category[todos_attributes][1][content]
category[todos_attributes][2][content]
Railsは各フォームのname属性に対して0~n(timesで指定した数)の値を付与します。
これによって、複数のフォームが作成されます。
空のフォームは新規作成しない
前回の記事で紹介した通り、ストロングパラメータd_blank
を指定することで、空のフォームに対して_destroy
するのを防ぎます。
例えば3つのフォームがあるときに
1つめ: 投稿1
2つめ: (空欄)
3つめ: 投稿3
という値を入力し送信したとき、作成されるのは
投稿1
投稿3
です。2つめのフォームの空欄はスキップされるわけですね。
参考