回答編集履歴

4

誤字

2020/05/22 06:03

投稿

rhiroe
rhiroe

スコア2349

test CHANGED
@@ -88,9 +88,11 @@
88
88
 
89
89
  @product = Product.find(params[:product_id])
90
90
 
91
- @reviews = @product.reviews.new(review_params)
91
+ # render action: :new した場合には @review が必要
92
92
 
93
+ @review = @product.reviews.new(review_params)
94
+
93
- if review.save
95
+ if @review.save
94
96
 
95
97
  redirect_to products_path, notice: "保存が成功しました"
96
98
 

3

追記

2020/05/22 06:03

投稿

rhiroe
rhiroe

スコア2349

test CHANGED
@@ -57,3 +57,85 @@
57
57
  ロールバックが起きる原因がわからないので例外をログに出力してもらえますか?
58
58
 
59
59
  `review.save!`のように`save`の後ろに`!`をつけるとログに例外が出力されるようになります。
60
+
61
+
62
+
63
+ ---
64
+
65
+
66
+
67
+ ログの内容とコードの内容が合ってなかったり、エラーが起きるはずのコードでエラーが起きてないなど、ちょっとこれ以上はわかりかねるので、こんな感じで書けば動くんじゃないかなというサンプルを述べておきます。参考にしてください。
68
+
69
+
70
+
71
+ ```
72
+
73
+ def new
74
+
75
+ @product = Product.find(params[:id])
76
+
77
+ @review = @product.reviews.new # 関連レコードはこのように作成すれば product_id は不要。
78
+
79
+ end
80
+
81
+
82
+
83
+  def create
84
+
85
+ # render action: :new した場合には @product が必要
86
+
87
+ # form_with model: [@product, @review] で送信したら product のIDは params[:product_id] にあるのが普通
88
+
89
+ @product = Product.find(params[:product_id])
90
+
91
+ @reviews = @product.reviews.new(review_params)
92
+
93
+ if review.save
94
+
95
+ redirect_to products_path, notice: "保存が成功しました"
96
+
97
+ else
98
+
99
+ render action: :new, notice: "保存が失敗しました"
100
+
101
+ end
102
+
103
+ end
104
+
105
+
106
+
107
+ private
108
+
109
+ def review_params
110
+
111
+ params.require(:review).permit(:total, :package, :price, :color, :amount, :naming, :concept, :balance, :comment).merge(user_id: @current_user.id)
112
+
113
+ end
114
+
115
+ ```
116
+
117
+ ```erb
118
+
119
+ <h1>Review sheets</h1>
120
+
121
+ <%= flash[:notice] %>
122
+
123
+ <%# model: に複数のオブジェクトを渡す際は [] で囲う必要があると思うけどエラーはない? %>
124
+
125
+ <%= form_with model: [@product, @review] do |f| %>
126
+
127
+ ...
128
+
129
+ <div><%= f.label :'コメント' %></div>
130
+
131
+ <div><%= f.text_field :comment %></div>
132
+
133
+ <div><%= f.submit "レビューする" %></div>
134
+
135
+ <%# 前述の通り product_id は不要 %>
136
+
137
+ <% end %>
138
+
139
+ <div><%= link_to "トップページ", products_path %></div>
140
+
141
+ ```

2

追記

2020/05/22 06:01

投稿

rhiroe
rhiroe

スコア2349

test CHANGED
@@ -51,3 +51,9 @@
51
51
  ~~これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?~~
52
52
 
53
53
  追記されていたようなので訂正します。
54
+
55
+
56
+
57
+ ロールバックが起きる原因がわからないので例外をログに出力してもらえますか?
58
+
59
+ `review.save!`のように`save`の後ろに`!`をつけるとログに例外が出力されるようになります。

1

訂正

2020/05/21 02:11

投稿

rhiroe
rhiroe

スコア2349

test CHANGED
@@ -48,4 +48,6 @@
48
48
 
49
49
 
50
50
 
51
- これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?
51
+ ~~これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?~~
52
+
53
+ 追記されていたようなので訂正します。