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

回答編集履歴

3

追記

2021/06/08 01:35

投稿

asm
asm

スコア15149

answer CHANGED
@@ -5,4 +5,47 @@
5
5
  questionnaire,* = QuestionnaireForm.seed do |s|
6
6
  ```
7
7
 
8
- 等と、最初の要素だけを配列に入れるなりしないといけません。
8
+ 等と、最初の要素だけを配列に入れるなりしないといけません。
9
+
10
+ ---
11
+
12
+ [参考までにもうちょい新しいissueでのコメント](https://github.com/mbleigh/seed-fu/issues/10#issuecomment-179200)を見た感じ
13
+
14
+ ```ruby
15
+ def tag_ids(display_order)
16
+ case display_order
17
+ when (1..14)
18
+ [QuestionnaireTag.find_by(display_order: 1), QuestionnaireTag.find_by(display_order: 2)]
19
+ when (15..35)
20
+ [QuestionnaireTag.find_by(display_order: 1), QuestionnaireTag.find_by(display_order: 3)]
21
+ when (36..68)
22
+ [QuestionnaireTag.find_by(display_order: 9), QuestionnaireTag.find_by(display_order: 6)]
23
+ when 69
24
+ [QuestionnaireTag.find_by(display_order: 9), QuestionnaireTag.find_by(display_order: 4)]
25
+ when 70
26
+ [QuestionnaireTag.find_by(display_order: 9), QuestionnaireTag.find_by(display_order: 5)]
27
+ when (71..100)
28
+ [QuestionnaireTag.find_by(display_order: 9), QuestionnaireTag.find_by(display_order: 8)]
29
+ end
30
+ end
31
+
32
+ CSV.table("#{Rails.root}/db/fixtures/csv/questionnaire_form.csv").each do |record|
33
+ next if record[:id].nil?
34
+ QuestionnaireForm.seed do |s|
35
+ s.id = record[:id]
36
+ s.title = record[:title]
37
+ s.display_order = record[:display_order]
38
+ s.questionnaire_id = 1
39
+ s.questionnaire_tags << tag_ids(record[:display_order])
40
+ end
41
+ tags = tag_ids(record[:display_order])
42
+ tags.each do |t|
43
+ QuestionnaireFormsTag.seed do |s|
44
+ s.questionnaire_tag = t
45
+ s.questionnaire_form = QuestionnaireForm.find(record[:id])
46
+ end
47
+ end
48
+ end
49
+ ```
50
+
51
+ みたいに分けるようですね

2

修正

2021/06/08 01:35

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,1 +1,8 @@
1
+ seed_fuの`seed`メソッドは仕様変更したようで[モデルインスタンスの**配列**を返します。](https://rubydoc.info/gems/seed-fu/SeedFu/Seeder#seed-instance_method)
1
- ちょいいったん消
2
+ なのでブロックを渡て一つだけ作成る場合は
3
+
4
+ ```ruby
5
+ questionnaire,* = QuestionnaireForm.seed do |s|
6
+ ```
7
+
8
+ 等と、最初の要素だけを配列に入れるなりしないといけません。

1

修正

2021/06/08 01:22

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,11 +1,1 @@
1
- [has_and_belongs_to_many関連付け](https://railsguides.jp/association_basics.html#has-and-belongs-to-many関連付け)のテーブル構造を見ると
2
- 中間テーブルの名前が`questionnaire_forms_questionnaire_tags`になるはずです。
3
- 実際はなんやかんやあって`questionnaire_forms_tags`になるようですが
4
- 生成ルールがややこしいのでmigrationでは[create_join_table](https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-create_join_table)を使った方がいいですね。
5
-
6
-
7
- 今回の場合は、中間テーブルを`questionnaire_form_tags`にしたいようなので
8
- - `has_many :through`を用いる
9
- - [join_table](https://railsguides.jp/association_basics.html#join-table)オプションを使う
10
-
11
- らかです。
1
+ ょい、いったん消します。