Repository: kotagau/furima-42269
Pull request #18: Item edit
Author: login: kotagau
Created: 2025-05-11T10:46:36Z | Merged: 2025-05-11T11:28:46Z

What?
商品編集機能の導入

Why?
最終課題の実施項目だから


Diff:
diff --git a/app/controllers/items_controller.rb b/app/controllers/items_controller.rb
index e4aa809..56c5423 100644
--- a/app/controllers/items_controller.rb
+++ b/app/controllers/items_controller.rb
@@ -1,7 +1,7 @@
 class ItemsController < ApplicationController
   
 before_action :authenticate_user!, except:[:index,:show]
-
+before_action :item_find,only:[:show,:edit,:update]
 
   def index
     @items=Item.all.order("created_at DESC")
@@ -24,13 +24,26 @@ def create
 
 
   def show
-  @item=Item.find(params[:id])
+  
   end
 
 
-  # def edit
-  #   @item = Item.find(params[:id])
-  # end
+  def edit
+      if current_user.id == @item.user.id
+         edit_item_path
+      else
+        redirect_to root_path
+      end
+  end
+
+  def update
+    if @item.update(item_params)
+        redirect_to item_path
+    else
+        render :edit, status: :unprocessable_entity
+    end
+  end
+
 
   # def delete
   #   @item = Item.find(params[:id])
@@ -45,4 +58,10 @@ def show
   def item_params
     params.require(:item).permit(:image , :price , :product_name , :product_explanation , :product_category_id , :product_status_id , :deliver_fee_payment_id , :prefecture_id , :deliver_day_id ,).merge(user_id: current_user.id)
   end
+
+  def item_find
+    @item=Item.find(params[:id])
+  end
+
+
 end
diff --git a/app/views/items/edit.html.erb b/app/views/items/edit.html.erb
index 7f54465..b4497ab 100644
--- a/app/views/items/edit.html.erb
+++ b/app/views/items/edit.html.erb
@@ -7,11 +7,9 @@ app/assets/stylesheets/items/new.css %>
   </header>
   <div class="items-sell-main">
     <h2 class="items-sell-title">商品の情報を入力</h2>
-    <%= form_with local: true do |f| %>
+    <%= form_with( model:@item , local: true) do |f| %>
 
-    <%# インスタンスを渡して、エラー発生時にメッセージが表示されるようにしましょう。%>
-    <%# render 'shared/error_messages', model: f.object %>
-    <%# //インスタンスを渡して、エラー発生時にメッセージが表示されるようにしましょう。%>
+    <%= render 'shared/error_messages', model: f.object %>
 
     <%# 商品画像 %>
     <div class="img-upload">
@@ -23,7 +21,7 @@ app/assets/stylesheets/items/new.css %>
         <p>
           クリックしてファイルをアップロード
         </p>
-        <%= f.file_field :hoge, id:"item-image" %>
+        <%= f.file_field :image, id:"item-image" %>
       </div>
     </div>
     <%# /商品画像 %>
@@ -33,13 +31,13 @@ app/assets/stylesheets/items/new.css %>
         商品名
         <span class="indispensable">必須</span>
       </div>
-      <%= f.text_area :hoge, class:"items-text", id:"item-name", placeholder:"商品名（必須 40文字まで)", maxlength:"40" %>
+      <%= f.text_area :product_name, class:"items-text", id:"item-name", placeholder:"商品名（必須 40文字まで)", maxlength:"40" %>
       <div class="items-explain">
         <div class="weight-bold-text">
           商品の説明
           <span class="indispensable">必須</span>
         </div>
-        <%= f.text_area :hoge, class:"items-text", id:"item-info", placeholder:"商品の説明（必須 1,000文字まで）（色、素材、重さ、定価、注意点など）例）2010年頃に1万円で購入したジャケットです。ライトグレーで傷はありません。あわせやすいのでおすすめです。" ,rows:"7" ,maxlength:"1000" %>
+        <%= f.text_area :product_explanation, class:"items-text", id:"item-info", placeholder:"商品の説明（必須 1,000文字まで）（色、素材、重さ、定価、注意点など）例）2010年頃に1万円で購入したジャケットです。ライトグレーで傷はありません。あわせやすいのでおすすめです。" ,rows:"7" ,maxlength:"1000" %>
       </div>
     </div>
     <%# /商品名と商品説明 %>
@@ -52,12 +50,12 @@ app/assets/stylesheets/items/new.css %>
           カテゴリー
           <span class="indispensable">必須</span>
         </div>
-        <%= f.collection_select(:hoge, [], :hoge, :hoge, {}, {class:"select-box", id:"item-category"}) %>
+        <%= f.collection_select(:product_category_id, ProductCategory.all, :id, :name, {}, {class:"select-box", id:"item-category"}) %>
         <div class="weight-bold-text">
           商品の状態
           <span class="indispensable">必須</span>
         </div>
-        <%= f.collection_select(:hoge, [], :hoge, :hoge, {}, {class:"select-box", id:"item-sales-status"}) %>
+        <%= f.collection_select(:product_status_id, ProductStatus.all, :id, :name, {}, {class:"select-box", id:"item-sales-status"}) %>
       </div>
     </div>
     <%# /商品の詳細 %>
@@ -73,17 +71,17 @@ app/assets/stylesheets/items/new.css %>
           配送料の負担
           <span class="indispensable">必須</span>
         </div>
-        <%= f.collection_select(:hoge, [], :hoge, :hoge, {}, {class:"select-box", id:"item-shipping-fee-status"}) %>
+        <%= f.collection_select(:deliver_fee_payment_id, DeliverFeePayment.all, :id, :name, {}, {class:"select-box", id:"item-shipping-fee-status"}) %>
         <div class="weight-bold-text">
           発送元の地域
           <span class="indispensable">必須</span>
         </div>
-        <%= f.collection_select(:hoge, [], :hoge, :hoge, {}, {class:"select-box", id:"item-prefecture"}) %>
+        <%= f.collection_select(:prefecture_id, Prefecture.all, :id, :name, {}, {class:"select-box", id:"item-prefecture"}) %>
         <div class="weight-bold-text">
           発送までの日数
           <span class="indispensable">必須</span>
         </div>
-        <%= f.collection_select(:hoge, [], :hoge, :hoge, {}, {class:"select-box", id:"item-scheduled-delivery"}) %>
+        <%= f.collection_select(:deliver_day_id, DeliverDay.all, :id, :name, {}, {class:"select-box", id:"item-scheduled-delivery"}) %>
       </div>
     </div>
     <%# /配送について %>
@@ -101,7 +99,7 @@ app/assets/stylesheets/items/new.css %>
             <span class="indispensable">必須</span>
           </div>
           <span class="sell-yen">¥</span>
-          <%= f.text_field :hoge, class:"price-input", id:"item-price", placeholder:"例）300" %>
+          <%= f.text_field :price, class:"price-input", id:"item-price", placeholder:"例）300" %>
         </div>
         <div class="price-content">
           <span>販売手数料 (10%)</span>
@@ -141,7 +139,7 @@ app/assets/stylesheets/items/new.css %>
     <%# 下部ボタン %>
     <div class="sell-btn-contents">
       <%= f.submit "変更する" ,class:"sell-btn" %>
-      <%=link_to 'もどる', "#", class:"back-btn" %>
+      <%=link_to 'もどる', item_path, class:"back-btn" %>
     </div>
     <%# /下部ボタン %>
   </div>
@@ -158,4 +156,5 @@ app/assets/stylesheets/items/new.css %>
       ©︎Furima,Inc.
     </p>
   </footer>
-</div>
\ No newline at end of file
+</div>
+
diff --git a/app/views/items/show.html.erb b/app/views/items/show.html.erb
index 655c1ba..f4ec2a9 100644
--- a/app/views/items/show.html.erb
+++ b/app/views/items/show.html.erb
@@ -25,7 +25,7 @@
 
       <% if user_signed_in? %>
            <%  if current_user.id == @item.user.id%>
-           <%= link_to "商品の編集", "#", method: :get, class: "item-red-btn" %>
+           <%= link_to "商品の編集", edit_item_path, method: :get, class: "item-red-btn" %>
            <p class="or-text">or</p>
            <%= link_to "削除", "#", data: {turbo_method: :delete}, class:"item-destroy" %>
 


Reviews:
user: login: OhyaYouki
body: レビュー依頼確認しました。

コメントいたしましたので、ご確認をお願いいたします。

コードの修正後、コミット・プッシュを行った上で再度レビュー依頼をお送りください。
よろしくお願いいたします。
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-11T11:04:15Z
user: login: kotagau
state: COMMENTED
author_association: OWNER
submitted_at: 2025-05-11T11:08:21Z
user: login: kotagau
state: COMMENTED
author_association: OWNER
submitted_at: 2025-05-11T11:10:41Z
user: login: minachanchan
body: 実装お疲れ様です。

現在、こちらのプルリクエストにコードの変更内容が反映できていないようです。
コミット・プッシュをし忘れていないかご確認いただければと思います。
※こちらのプルリクエストにコミットプッシュ名が表示されていれば反映できています

変更内容が反映できましたら、再度レビュー依頼をお願いします。

ご不明点があれば、テックコネクトでメンターへご質問ください。


state: COMMENTED
author_association: NONE
submitted_at: 2025-05-11T11:15:58Z
user: login: minachanchan
body: 実装お疲れ様です。

実装内容を確認しました。コメントいたしましたので、ご確認をお願いいたします。

修正後、再度レビュー依頼をお願いします。
ご不明点があれば、テックコネクトでメンターへご質問ください。

実装完了まで引き続き、一緒に頑張りましょう。
よろしくお願いします。




state: COMMENTED
author_association: NONE
submitted_at: 2025-05-11T11:21:49Z
user: login: kotagau
state: COMMENTED
author_association: OWNER
submitted_at: 2025-05-11T11:24:01Z
user: login: OhyaYouki
body: 修正点を確認いたしました。

**LGTM**とさせていただきます！
実装お疲れ様でした！

こちらのブランチは忘れずにMergeいただき、ローカルのMainにPullした後に
次の実装のためのブランチを切って次の課題に取り組みましょう！

引き続き、開発頑張っていきましょう！応援しております。
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-11T11:25:42Z

Review comments:
diff_hunk: @@ -28,9 +28,24 @@ def show
   end
 
 
-  # def edit
-  #   @item = Item.find(params[:id])
-  # end
+  def edit
+    @item = Item.find(params[:id])
path: app/controllers/items_controller.rb
user: login: OhyaYouki
body: ```ruby
@item = Item.find(params[:id])
```

show, edit, updateアクション内で上記のコードが重複していますので
private内にまとめてbefore_actionで呼び出す形に修正をお願いいたします。
created_at: 2025-05-11T11:02:48Z
author_association: NONE
diff_hunk: @@ -1,4 +1,4 @@
-<% if model.errors.any? %>
+<% if @item.errors.any? %>
path: app/views/shared/_error_messages.html.erb
user: login: OhyaYouki
body: ```ruby
<% if @item.errors.any? %>
```
上記の修正は元に戻しておきましょう。

ユーザー機能や今後の購入機能でも使うファイルであるため、@itemに限定するとエラーになってしまいます。
created_at: 2025-05-11T11:04:10Z
author_association: NONE
diff_hunk: @@ -1,4 +1,4 @@
-<% if model.errors.any? %>
+<% if @item.errors.any? %>
path: app/views/shared/_error_messages.html.erb
user: login: kotagau
body: 完了
created_at: 2025-05-11T11:08:21Z
author_association: OWNER
diff_hunk: @@ -28,9 +28,24 @@ def show
   end
 
 
-  # def edit
-  #   @item = Item.find(params[:id])
-  # end
+  def edit
+    @item = Item.find(params[:id])
path: app/controllers/items_controller.rb
user: login: kotagau
body: 完了
created_at: 2025-05-11T11:10:41Z
author_association: OWNER
diff_hunk: @@ -28,9 +28,24 @@ def show
   end
 
 
-  # def edit
-  #   @item = Item.find(params[:id])
-  # end
+  def edit
+    @item = Item.find(params[:id])
path: app/controllers/items_controller.rb
user: login: minachanchan
body: ```ruby
@item = Item.find(params[:id])
```
beforeアクションでまとめたことで削除できる記述を削除しましょう。
created_at: 2025-05-11T11:20:39Z
author_association: NONE
diff_hunk: @@ -28,9 +28,24 @@ def show
   end
 
 
-  # def edit
-  #   @item = Item.find(params[:id])
-  # end
+  def edit
+    @item = Item.find(params[:id])
path: app/controllers/items_controller.rb
user: login: kotagau
body: 完了
created_at: 2025-05-11T11:24:01Z
author_association: OWNER

PR comments:
user: login: kotagau
created_at: 2025-05-11T10:47:17Z
body: https://gyazo.com/4adbeed8101879b89d41203cace26f89
出品者のアカウントでログイン時、商品編集ページを開くことができる動画
author_association: OWNER
user: login: kotagau
created_at: 2025-05-11T10:49:07Z
body: https://gyazo.com/4ccb167783d6a475903a911ecf57ca90
商品編集ページで必要項目入力後、商品情報を更新できる動画
author_association: OWNER
user: login: kotagau
created_at: 2025-05-11T10:50:32Z
body: https://gyazo.com/d2d9171b9165ca794e22d88081d0f0cb
編集ページで必須項目に不備が存在するとき編集ページに戻り、エラー文が表示される動画
author_association: OWNER
user: login: kotagau
created_at: 2025-05-11T10:52:48Z
body: https://gyazo.com/52913f6c53e639053d5a79b8ab485870
編集画面で何も入力しなくても画像なしの商品にはならない動画
author_association: OWNER
user: login: kotagau
created_at: 2025-05-11T10:54:50Z
body: https://gyazo.com/3b1097d776f258c7c81576a2f0d9077d
自分以外の人の出品編集ページにURLからアクセスすると、トップページに戻る動画
author_association: OWNER
user: login: kotagau
created_at: 2025-05-11T10:56:49Z
body: https://gyazo.com/aa8fe0aaeab007475dd7ce8a2a832c55
ログアウト状態で商品編集ページへアクセスすると、ログイン画面へ移動する動画
author_association: OWNER
user: login: kotagau
created_at: 2025-05-11T10:59:19Z
body: https://gyazo.com/a15d81dd573302c13b5d0a420e57cd6f
商品編集ページアクセス時、画像、販売手数料等以外は既存の情報が表示されている動画
author_association: OWNER
user: login: kotagau
created_at: 2025-05-11T11:17:10Z
body: 大変失礼いたしました。

author_association: OWNER