teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

内容加筆

2018/08/05 07:36

投稿

og33
og33

スコア14

title CHANGED
@@ -1,1 +1,1 @@
1
- submitで複数ードをcreateしたい
1
+ モデルに対して複数レードを一括登録したい
body CHANGED
@@ -1,4 +1,53 @@
1
1
  ### やりたいこと
2
+ 1つのモデルに対して複数レードを一括登録したい
3
+ ![イメージ説明](4dc39a1b3f66341cdd79f904a3a1447a.png)
4
+ ### 試したこと・考えたこと
5
+ ・やりたいことはフォームの一括登録であるので、それを調べたところ、以下のようにfields_forを利用したフォームの作り方を紹介した記事が多数見つかったが、今回やりたいことは、「form_for内で異なるモデルを編集できるようになる。」ことではない。やりたいことはまさしく下記のようなこと。
6
+ http://ruby-rails.hatenadiary.com/entry/20141208/1418018874#accepts_nested_attributes_for-form
7
+ ・オブジェクトを保存したいレコード分作成して保存することを考えたが、力技すぎるので却下。
8
+ ### 仕様
9
+ view:
10
+ ```
11
+ = Time.zone.today.strftime('%Y/%m/%d')
12
+ = form_for @new_tobanhyo do |f|
13
+ - @tobanhyos[false].each do |tobanhyo|
14
+ p
2
- 画像のようなフォームにおいて、1度のsubmitで複数のレコードをcreateしたいのですが、どのようにすればいいでしょうか?
15
+ = f.select :room_id, @rooms, :selected => tobanhyo.room.id
16
+ = f.select :role_id, @roles, :selected => tobanhyo.role.id
17
+ = f.date_field :start_of_period, value: Time.zone.today.strftime('%y/%m/%d')
18
+ = "---------------------"
19
+ - @tobanhyos[true].each do |tobanhyo|
20
+ p
21
+ = f.select :room_id, @rooms, :selected => tobanhyo.room.id
22
+ = f.select :role_id, @roles, :selected => tobanhyo.role.id
23
+ = f.date_field :start_of_period, value: Time.zone.today.strftime('%Y/%m/%d')
24
+ = f.submit
25
+ ```
26
+ もちろんこれでは一括登録はできず。
27
+ モデル:
28
+ ```
29
+ ActiveRecord::Schema.define(version: 20180603012133) do
3
30
 
31
+ create_table "roles", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
32
+ t.string "name"
4
- ![イメージ説明](4dc39a1b3f66341cdd79f904a3a1447a.png)
33
+ t.datetime "created_at", null: false
34
+ t.datetime "updated_at", null: false
35
+ end
36
+
37
+ create_table "rooms", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
38
+ t.string "name"
39
+ t.datetime "created_at", null: false
40
+ t.datetime "updated_at", null: false
41
+ end
42
+
43
+ create_table "tobanhyos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
44
+ t.integer "room_id"
45
+ t.integer "role_id"
46
+ t.boolean "fixed"
47
+ t.datetime "created_at", null: false
48
+ t.datetime "updated_at", null: false
49
+ t.date "start_of_period"
50
+ end
51
+
52
+ end
53
+ ```