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

質問編集履歴

5

質問追加

2017/04/25 03:14

投稿

innjera
innjera

スコア132

title CHANGED
File without changes
body CHANGED
@@ -4,6 +4,24 @@
4
4
 
5
5
  ちなみに、associationを無理やりseedファイル内にて定義しなければ、`seed`ファイルは通ります。
6
6
 
7
+ また、`rails c`で同じコマンドを打つと、確り機能します。
8
+ ```ruby
9
+ [1] pry(main)> lesson = Lesson.find(42);0
10
+ Lesson Load (0.8ms) SELECT "lessons".* FROM "lessons" WHERE "lessons"."id" = $1 LIMIT $2 [["id", 42], ["LIMIT", 1]]
11
+ => 0
12
+ [2] pry(main)> situation = Situation.all.sample;0
13
+ Situation Load (0.6ms) SELECT "situations".* FROM "situations"
14
+ => 0
15
+ [3] pry(main)> lesson.situations << situation;0
16
+ (0.4ms) BEGIN
17
+ SQL (0.6ms) INSERT INTO "lessons_situations" ("situation_id", "lesson_id") VALUES ($1, $2) [["situation_id", 2], ["lesson_id", 42]]
18
+ (4.8ms) COMMIT
19
+ => 0
20
+ [4] pry(main)> lesson.situations.count
21
+ (1.3ms) SELECT COUNT(*) FROM "situations" INNER JOIN "lessons_situations" ON "situations"."id" = "lessons_situations"."situation_id" WHERE "lessons_situations"."lesson_id" = $1 [["lesson_id", 42]]
22
+ => 3
23
+ ```
24
+
7
25
  ###前提
8
26
  `model`は`Lesson`と`Situation`の2つで、各々の`table`含む`model`は以下の通りです。また、`Lesson`と`Situation`の間にjoin tableを組んでます。(以下コード内に記載)
9
27
  ```rby

4

タグ追加

2017/04/25 03:14

投稿

innjera
innjera

スコア132

title CHANGED
File without changes
body CHANGED
File without changes

3

質問改善

2017/04/25 02:20

投稿

innjera
innjera

スコア132

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
- 以下の通り関連付けを組んでおり、通常の動作(`new/create/edit/update`)には問題ありません。
1
+ 以下の通り`Lesson`と`Situation`の間に多対多の関連付けを組んでおり、通常の動作(`new/create/edit/update`)には問題ありません。
2
2
 
3
- 初期データとしてseedファイル内にて最初から関連付けがされた状態としたいのですが、`ActiveRecord::AssociationTypeMismatch:Situation(#70127423708740) expected, got NilClass(#70127366627340)`といったエラーが出てしまい解決できず、やり方をご教示頂けますと大変助かります。
3
+ 初期データとしてseedファイル内にて最初から関連付けがされた状態としたいのですが、`lesson.situations << Situation.all.sample`を`Lesson`modelの`seed`ファイルに記載したところ、`ActiveRecord::AssociationTypeMismatch:Situation(#70127423708740) expected, got NilClass(#70127366627340)`といったエラーが出てしまい解決できず、やり方をご教示頂けますと大変助かります。
4
4
 
5
5
  ちなみに、associationを無理やりseedファイル内にて定義しなければ、`seed`ファイルは通ります。
6
6
 

2

title修正

2017/04/25 01:46

投稿

innjera
innjera

スコア132

title CHANGED
@@ -1,1 +1,1 @@
1
- 関連付けをseedファイル内で初期データとして設定する方法
1
+ Rails : has_manyをseedファイル内で初期データとして設定する方法
body CHANGED
File without changes

1

コード追加

2017/04/25 01:44

投稿

innjera
innjera

スコア132

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  ちなみに、associationを無理やりseedファイル内にて定義しなければ、`seed`ファイルは通ります。
6
6
 
7
7
  ###前提
8
- `model`は`Lesson`と`Situation`の2つで、各々の`table`含む`model`は以下の通りです。
8
+ `model`は`Lesson`と`Situation`の2つで、各々の`table`含む`model`は以下の通りです。また、`Lesson`と`Situation`の間にjoin tableを組んでます。(以下コード内に記載)
9
9
  ```rby
10
10
  #Lesson modelとtable
11
11
  id :integer not null, primary key
@@ -25,6 +25,15 @@
25
25
  class Situation < ApplicationRecord
26
26
  has_and_belongs_to_many :lessons
27
27
  end
28
+
29
+ class CreateJoinTableSituationLesson < ActiveRecord::Migration[5.0]
30
+ def change
31
+ create_join_table :situations, :lessons do |t|
32
+ # t.index [:situation_id, :lesson_id]
33
+ # t.index [:lesson_id, :situation_id]
34
+ end
35
+ end
36
+ end
28
37
  ```
29
38
  `seeds`ファイルです。`Situation`から`sample`メソッドを用いてランダムに取り出し、`Lesson`に関連つけたいとの意図です。
30
39