質問編集履歴

10

現状の追加

2021/03/17 09:04

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -556,6 +556,68 @@
556
556
 
557
557
  ```
558
558
 
559
+
560
+
561
+ ### 試したこと2
562
+
563
+
564
+
565
+ save処理後すぐに保存された最新のレコードを取り出す
566
+
567
+ ```
568
+
569
+ def create
570
+
571
+ @camp = CampTags.new(camp_params)
572
+
573
+
574
+
575
+ if @camp.valid?
576
+
577
+ @tag_list = camp_params[:style].split(/[[:blank:]]+/).select(&:present?)
578
+
559
- データはどうやったら取り出せるのでしょうか
579
+ @camp.save(@tag_list)
580
+
581
+ camp = Camp.order(updated_at: :desc).limit(1)
582
+
583
+ @camp_id = camp.ids
584
+
585
+ @item_ids = @camp.item_ids
586
+
587
+ binding.pry
588
+
589
+ @item_ids.each do |item_id|
590
+
591
+ CampItemRelation.create(camp_id: @camp_id, item_id: item_id)
592
+
593
+ end
594
+
595
+ return redirect_to root_path
596
+
597
+ else
598
+
599
+ render "new"
600
+
601
+ end
602
+
603
+ end
604
+
605
+ ```
606
+
607
+
608
+
609
+ ```camp = Camp.order(updated_at: :desc).limit(1)```
610
+
611
+ とすることで最新のレコードを一個取り出しています。
612
+
613
+
614
+
615
+ ![イメージ説明](26a932b5800a9588787aa508344d1bda.png)
616
+
617
+
618
+
619
+
620
+
621
+ 答えはおそらくもうすぐそこです!
560
622
 
561
623
  どうかご教授ください!

9

@campを調べた記述を追加

2021/03/17 09:03

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -58,6 +58,20 @@
58
58
 
59
59
 
60
60
 
61
+ @campを確認するとidは保存されているようです。
62
+
63
+ ```
64
+
65
+ >> @camp
66
+
67
+ => #<CampTags:0x00007ff6085ac980 @errors=#<ActiveModel::Errors:0x00007ff6085ac250 @base=#<CampTags:0x00007ff6085ac980 ...>, @messages={}, @details={}>, @title="bboobb", @style="無骨キャンプ", @item_ids=["1", "2"], @user_id=1, @validation_context=nil, @camp=#<Camp id: 36, user_id: 1, title: "bboobb", created_at: "2021-03-17 06:28:53", updated_at: "2021-03-17 06:28:53">, @tag_id=#<Tag id: 4, style: "無骨キャンプ", created_at: "2021-03-16 09:04:46", updated_at: "2021-03-16 09:04:46">>
68
+
69
+ >>
70
+
71
+ ```
72
+
73
+
74
+
61
75
  ### 該当するコード
62
76
 
63
77
 

8

error文のテキスト表示

2021/03/17 06:42

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,24 @@
16
16
 
17
17
  ![イメージ説明](27999a5e0ddef3f502a81501658bcc31.png)
18
18
 
19
+ ```
20
+
21
+ undefined method `id' for #<CampTags:0x00007ff6085ac980>
22
+
23
+ Request
24
+
25
+ Parameters:
26
+
27
+
28
+
29
+ {"authenticity_token"=>"6h75fWC/+zhPx96ZoRyir+kyevpfqLqawP75tlOKrGHOXHlfKtMlG0qvpQMLgrjc5Ld3x1bvduvrtllnJPZagw==",
30
+
31
+ "camp_tags"=>{"title"=>"bboobb", "style"=>"無骨キャンプ", "item_ids"=>["1", "2"]},
32
+
33
+ "commit"=>"Send"}
34
+
35
+ ```
36
+
19
37
 
20
38
 
21
39
  - @camp.idを取り出したいがidがないと出る

7

アプリの仕様を記述

2021/03/17 06:31

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,17 @@
1
+ ### アプリの仕様
2
+
3
+ - キャンプの記録をするアプリです
4
+
5
+ - ユーザーはキャンプのタイトルとキャンプスタイルという名のタグをつけて投稿します。
6
+
7
+ - キャンプタイトルとタグを同時に保存するためにフォームオブジェクトを使用しています。
8
+
9
+ - ユーザーは自分の持っているアイテムを登録できます。
10
+
11
+ - キャンプには複数のアイテムを持っていける。アイテムは何度でもキャンプに持っていけることからキャンプとアイテムは多対多の関係です。
12
+
13
+ - キャンプ記録を作成する際持って行ったアイテムの登録を実現させたい
14
+
1
15
  ### エラー内容
2
16
 
3
17
  ![イメージ説明](27999a5e0ddef3f502a81501658bcc31.png)

6

試したこと追加

2021/03/17 06:19

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -348,4 +348,168 @@
348
348
 
349
349
  ```
350
350
 
351
+
352
+
353
+ ### 試したこと
354
+
355
+
356
+
357
+ コントローラーではitem_idsを扱える
358
+
359
+ フォームオブジェクトではcamp.idを扱えることから
360
+
361
+ CampItemRelation.createでのcampとitemのidの保存を別々で行ってみた。
362
+
363
+ 最初にフォームオブジェクトで```CampItemRelation.create(camp_id: @camp.id)```として
364
+
365
+ 次にコントローラーで```CampItemRelation.create(item_id: item_id)```
366
+
367
+ こうすることでデータを扱えるうちに保存できると考えましたが、データはどうやら同時に保存しないといけないらしくこれらの記述は読み飛ばされたようでした。
368
+
369
+ ```controller
370
+
371
+ class CampsController < ApplicationController
372
+
373
+ before_action :authenticate_user!, except: [:index, :show]
374
+
375
+ before_action :set_item, only: [:index, :new, :show, :create]
376
+
377
+ def index
378
+
379
+ @tags = Tag.all
380
+
381
+ end
382
+
383
+
384
+
385
+ def new
386
+
387
+ @camp = CampTags.new
388
+
389
+ end
390
+
391
+
392
+
393
+ def create
394
+
395
+ @camp = CampTags.new(camp_params)
396
+
397
+
398
+
399
+ if @camp.valid?
400
+
401
+ @tag_list = camp_params[:style].split(/[[:blank:]]+/).select(&:present?)
402
+
403
+ @camp.save(@tag_list)
404
+
405
+
406
+
407
+ @item_ids = @camp.item_ids
408
+
409
+ @item_ids.each do |item_id|
410
+
411
+ CampItemRelation.create(item_id: item_id)
412
+
413
+ end
414
+
415
+ return redirect_to root_path
416
+
417
+ else
418
+
419
+ render "new"
420
+
421
+ end
422
+
423
+ end
424
+
425
+
426
+
427
+ private
428
+
429
+
430
+
431
+ def camp_params
432
+
433
+ params.require(:camp_tags).permit(:title, :style, item_ids: []).merge(user_id: current_user.id)
434
+
435
+ end
436
+
437
+
438
+
439
+ def set_item
440
+
441
+ if user_signed_in?
442
+
443
+ user = User.find(current_user.id)
444
+
445
+ @items = user.items
446
+
447
+ end
448
+
449
+ end
450
+
451
+
452
+
453
+ end
454
+
455
+ ```
456
+
457
+
458
+
459
+ ```fromobject
460
+
461
+ class CampTags
462
+
463
+
464
+
465
+ include ActiveModel::Model
466
+
467
+ attr_accessor :title, :style, :user_id, :item_ids
468
+
469
+
470
+
471
+ with_options presence: true do
472
+
473
+ validates :title
474
+
475
+ validates :style
476
+
477
+ end
478
+
479
+
480
+
481
+ def save(tag_list)
482
+
483
+ @camp = Camp.create(user_id: user_id, title: title)
484
+
485
+ CampItemRelation.create(camp_id: @camp.id)
486
+
487
+ tag_list.each do |tag|
488
+
489
+ unless Tag.find_by(style: tag)
490
+
491
+ @tag = Tag.create(style: tag)
492
+
493
+ CampTagRelation.create(camp_id: @camp.id, tag_id: @tag.id)
494
+
495
+ else
496
+
497
+ @tag_id = Tag.find_by(style: tag)
498
+
499
+ CampTagRelation.create(camp_id: @camp.id, tag_id: @tag_id.id)
500
+
501
+ end
502
+
503
+ end
504
+
505
+ end
506
+
507
+
508
+
509
+ end
510
+
511
+ ```
512
+
513
+ データはどうやったら取り出せるのでしょうか
514
+
351
515
  どうかご教授ください!

5

現状の追加

2021/03/17 04:09

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,8 @@
22
22
 
23
23
  - @campを取り出せれば解決する
24
24
 
25
+ - @campを指定すると:camp_tagsからidを取り出そうとするため@camp.idが無いとエラーになる
26
+
25
27
 
26
28
 
27
29
  ### 該当するコード

4

タイトル変更

2021/03/17 03:03

投稿

motoki6318
motoki6318

スコア2

test CHANGED
@@ -1 +1 @@
1
- undefined method `id'  idを取り出した
1
+ undefined method `id'  idはどこへ行ってまっのか
test CHANGED
File without changes

3

現状の追加

2021/03/17 02:59

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,10 @@
18
18
 
19
19
  - campとtagの情報については登録保存は成功している
20
20
 
21
+ - @camp_id = 3と直球にidを指定してやるとitemとcampの関連付けはできた
22
+
23
+ - @campを取り出せれば解決する
24
+
21
25
 
22
26
 
23
27
  ### 該当するコード

2

ルーティングを追加

2021/03/17 00:31

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -238,6 +238,28 @@
238
238
 
239
239
 
240
240
 
241
+ ### ルーティング
242
+
243
+
244
+
245
+ ```
246
+
247
+ Rails.application.routes.draw do
248
+
249
+ root to: "camps#index"
250
+
251
+ resources :camps, only: [:new, :create, :show]
252
+
253
+ resources :items, only: [:new, :create, :show]
254
+
255
+ devise_for :users
256
+
257
+ end
258
+
259
+ ```
260
+
261
+
262
+
241
263
  ### テーブル同士のアソシエーション
242
264
 
243
265
 

1

入力欄のコードを追加

2021/03/16 10:53

投稿

motoki6318
motoki6318

スコア2

test CHANGED
File without changes
test CHANGED
@@ -172,6 +172,72 @@
172
172
 
173
173
 
174
174
 
175
+ 入力フォーム
176
+
177
+ ```newhtmlerb
178
+
179
+ <div class="wrapper">
180
+
181
+ <div class="side-ber">
182
+
183
+ <%= render "side_ber" %>
184
+
185
+ </div>
186
+
187
+ <%= form_with model: @camp, url: camps_path, class:'form-wrap', local: true do |f| %>
188
+
189
+ <div class='form'>
190
+
191
+ <div class="title-field">
192
+
193
+ <%= f.label :title, "キャンプタイトル" %>
194
+
195
+ <%= f.text_area :title, class:"input-title" %>
196
+
197
+ </div>
198
+
199
+ <div class="tag-field", id='tag-field'>
200
+
201
+ <%= f.label :style, "キャンプスタイル" %>
202
+
203
+ <%= f.text_field :style, class:"input-tag" %>
204
+
205
+ </div>
206
+
207
+
208
+
209
+ <p>使用アイテムを選択 </p>
210
+
211
+ <select name="camp_tags[item_ids][]" multiple>
212
+
213
+ <% @items.each do |item| %>
214
+
215
+ <option value=<%= item.id %>><%= item.name %></option>
216
+
217
+ <% end %>
218
+
219
+ </select>
220
+
221
+
222
+
223
+
224
+
225
+ </div>
226
+
227
+ <div class="submit-post">
228
+
229
+ <%= f.submit "Send", class: "submit-btn" %>
230
+
231
+ </div>
232
+
233
+ <% end %>
234
+
235
+ </div>
236
+
237
+ ```
238
+
239
+
240
+
175
241
  ### テーブル同士のアソシエーション
176
242
 
177
243