回答編集履歴
4
誤字
answer
CHANGED
@@ -43,8 +43,9 @@
|
|
43
43
|
# render action: :new した場合には @product が必要
|
44
44
|
# form_with model: [@product, @review] で送信したら product のIDは params[:product_id] にあるのが普通
|
45
45
|
@product = Product.find(params[:product_id])
|
46
|
+
# render action: :new した場合には @review が必要
|
46
|
-
@
|
47
|
+
@review = @product.reviews.new(review_params)
|
47
|
-
if review.save
|
48
|
+
if @review.save
|
48
49
|
redirect_to products_path, notice: "保存が成功しました"
|
49
50
|
else
|
50
51
|
render action: :new, notice: "保存が失敗しました"
|
3
追記
answer
CHANGED
@@ -27,4 +27,45 @@
|
|
27
27
|
追記されていたようなので訂正します。
|
28
28
|
|
29
29
|
ロールバックが起きる原因がわからないので例外をログに出力してもらえますか?
|
30
|
-
`review.save!`のように`save`の後ろに`!`をつけるとログに例外が出力されるようになります。
|
30
|
+
`review.save!`のように`save`の後ろに`!`をつけるとログに例外が出力されるようになります。
|
31
|
+
|
32
|
+
---
|
33
|
+
|
34
|
+
ログの内容とコードの内容が合ってなかったり、エラーが起きるはずのコードでエラーが起きてないなど、ちょっとこれ以上はわかりかねるので、こんな感じで書けば動くんじゃないかなというサンプルを述べておきます。参考にしてください。
|
35
|
+
|
36
|
+
```
|
37
|
+
def new
|
38
|
+
@product = Product.find(params[:id])
|
39
|
+
@review = @product.reviews.new # 関連レコードはこのように作成すれば product_id は不要。
|
40
|
+
end
|
41
|
+
|
42
|
+
def create
|
43
|
+
# render action: :new した場合には @product が必要
|
44
|
+
# form_with model: [@product, @review] で送信したら product のIDは params[:product_id] にあるのが普通
|
45
|
+
@product = Product.find(params[:product_id])
|
46
|
+
@reviews = @product.reviews.new(review_params)
|
47
|
+
if review.save
|
48
|
+
redirect_to products_path, notice: "保存が成功しました"
|
49
|
+
else
|
50
|
+
render action: :new, notice: "保存が失敗しました"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
def review_params
|
56
|
+
params.require(:review).permit(:total, :package, :price, :color, :amount, :naming, :concept, :balance, :comment).merge(user_id: @current_user.id)
|
57
|
+
end
|
58
|
+
```
|
59
|
+
```erb
|
60
|
+
<h1>Review sheets</h1>
|
61
|
+
<%= flash[:notice] %>
|
62
|
+
<%# model: に複数のオブジェクトを渡す際は [] で囲う必要があると思うけどエラーはない? %>
|
63
|
+
<%= form_with model: [@product, @review] do |f| %>
|
64
|
+
...
|
65
|
+
<div><%= f.label :'コメント' %></div>
|
66
|
+
<div><%= f.text_field :comment %></div>
|
67
|
+
<div><%= f.submit "レビューする" %></div>
|
68
|
+
<%# 前述の通り product_id は不要 %>
|
69
|
+
<% end %>
|
70
|
+
<div><%= link_to "トップページ", products_path %></div>
|
71
|
+
```
|
2
追記
answer
CHANGED
@@ -24,4 +24,7 @@
|
|
24
24
|
> privateメソッドにmargeで追加してみたりしましたが
|
25
25
|
|
26
26
|
~~これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?~~
|
27
|
-
追記されていたようなので訂正します。
|
27
|
+
追記されていたようなので訂正します。
|
28
|
+
|
29
|
+
ロールバックが起きる原因がわからないので例外をログに出力してもらえますか?
|
30
|
+
`review.save!`のように`save`の後ろに`!`をつけるとログに例外が出力されるようになります。
|
1
訂正
answer
CHANGED
@@ -23,4 +23,5 @@
|
|
23
23
|
|
24
24
|
> privateメソッドにmargeで追加してみたりしましたが
|
25
25
|
|
26
|
-
これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?
|
26
|
+
~~これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?~~
|
27
|
+
追記されていたようなので訂正します。
|