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

回答編集履歴

4

誤字

2020/05/22 06:03

投稿

rhiroe
rhiroe

スコア2352

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
- @reviews = @product.reviews.new(review_params)
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

追記

2020/05/22 06:03

投稿

rhiroe
rhiroe

スコア2352

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

追記

2020/05/22 06:01

投稿

rhiroe
rhiroe

スコア2352

answer CHANGED
@@ -24,4 +24,7 @@
24
24
  > privateメソッドにmargeで追加してみたりしましたが
25
25
 
26
26
  ~~これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?~~
27
- 追記されていたようなので訂正します。
27
+ 追記されていたようなので訂正します。
28
+
29
+ ロールバックが起きる原因がわからないので例外をログに出力してもらえますか?
30
+ `review.save!`のように`save`の後ろに`!`をつけるとログに例外が出力されるようになります。

1

訂正

2020/05/21 02:11

投稿

rhiroe
rhiroe

スコア2352

answer CHANGED
@@ -23,4 +23,5 @@
23
23
 
24
24
  > privateメソッドにmargeで追加してみたりしましたが
25
25
 
26
- これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?
26
+ ~~これのやり方が正しければそれで解決しそうに思えますが、これを質問内に記述していないのはどうしてですか?~~
27
+ 追記されていたようなので訂正します。