回答編集履歴
2
`form.object`に関して誤解があったので、全体を大きく変更。
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
[編集: 誤解があったので、大きく編集しました]
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
> エラー文よりobjectが空だと思い、
|
2
6
|
|
3
7
|
|
@@ -20,11 +24,11 @@
|
|
20
24
|
|
21
25
|
|
22
26
|
|
23
|
-
method `new_record?` は、モデルに対して有効です。`f.object`は、formオブジェクトの`object`メソッドの返り値です
|
27
|
+
method `new_record?` は、モデルに対して有効です。`f.object`は、formオブジェクトの`object`メソッドの返り値です。少なくとも Rails 5+ では、それは、与えたモデルに相当するようです([APIマニュアル](https://api.rubyonrails.org/v6.0.2/classes/ActionView/Helpers/FormBuilder.html))
|
24
28
|
|
29
|
+
。だから、それがnilであるということは、`book` にそもそもモデルのインスタンスが入っていないことを意味します。
|
25
30
|
|
26
|
-
|
27
|
-
|
31
|
+
たとえば、`new_record?`の文を
|
28
32
|
|
29
33
|
|
30
34
|
|
@@ -36,14 +40,14 @@
|
|
36
40
|
|
37
41
|
|
38
42
|
|
39
|
-
と書き換えると
|
43
|
+
と書き換えると、状況がより明快になるでしょう。同じことですが。
|
44
|
+
|
45
|
+
モデルがnilということは、`@book_form` がうまく渡っていないことを意味します。もう一つの回答に推測が書かれている(私とほぼ同時に投稿したものです)ので、そちらを参照するといいかも知れません。
|
40
46
|
|
41
47
|
|
42
48
|
|
43
49
|
もう一つの可能性は、そもそも`routes.rb`が正しく記述されていなくて、意図通りのControllerが読めていないことです。ログ出力を見たり、debug情報を出力させたりして、意図通りに動いているか、チェックすると良いでしょう。
|
44
50
|
|
45
|
-
なお、その場合でも、上述の書き換えは必要だと思います。
|
46
|
-
|
47
51
|
|
48
52
|
|
49
53
|
以上、推測に基づく回答でした。
|
1
コード中、model → book の変更。
test
CHANGED
@@ -10,13 +10,13 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
一つの可能性は、Controller中の`@book_form = Book.new`がERBにわたっていて、それがpartialの`_form.html.erb`に`
|
13
|
+
一つの可能性は、Controller中の`@book_form = Book.new`がERBにわたっていて、それがpartialの`_form.html.erb`に`book`として渡り、それを変数`f`でiteratorに渡しているという場合。
|
14
14
|
|
15
15
|
この場合、`_form.html.erb` の文
|
16
16
|
|
17
17
|
`form_with model:book,local:true do |f|`
|
18
18
|
|
19
|
-
中で`f` に入っているのはformオブジェクトであり、`
|
19
|
+
中で`f` に入っているのはformオブジェクトであり、`book`に入っているのが、モデルのインスタンス`Book.new`です。
|
20
20
|
|
21
21
|
|
22
22
|
|
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
```ruby
|
32
32
|
|
33
|
-
if
|
33
|
+
if book.new_record?
|
34
34
|
|
35
35
|
```
|
36
36
|
|