hibikousinnkibouのブログ

駆け出しプログラマーによる足跡ブログ

商品詳細表示及び編集機能

つまりshowアクション。

routesでルーティングを行い、index画面から遷移先のprefixを利用してパスを作成。

条件別に表示する項目を変える。

if文を利用し、

<% if user_signed_in? && current_user.id == @item.user_id %>
<%= link_to "商品の編集", "#", method: :get, class: "item-red-btn" %>
<p class="or-text">or</p>
<%= link_to "削除", "#", method: :delete, class:"item-destroy" %>
<% elsif user_signed_in? && current_user.id != @item.user_id %>
<%# 商品が売れていない場合はこちらを表示しましょう %>
<%= link_to "購入画面に進む", "#" ,class:"item-red-btn"%>
<%# //商品が売れていない場合はこちらを表示しましょう %>
<% else %>
<%end%>

と記述した。

しかし、

<%if user_signed_in?%>

       <%if current_user.id == @item.user_id %>

              編集ボタン

              削除ボタン

        <%else %>

    購入ボタン

        <%end %>

<%end %>

という記載の方が、user_signde_in?を2回記述しなくて良いのですっきりする。

 

次に edit アクション。

routes で同じくルーティングを行い、 show 画面から遷移先の prefix を利用してパスを作成。ログインしてない場合と、商品出品者でない場合は、 edit 画面に url 直接入力しても遷移しないように、 item コントローラーで edit アクションに

redirect_to action: :index unless user_signed_in? && current_user.id == @item.user_id

を記述。

必要なデータは @item = Item.find(params[:id])とした。

 

edit のビューで、

<%= render 'shared/error_messages', model: f.object %>

がエラーになったが、テキストフィールドの内容が何を表しているか記述してない時にエラーになった。 f は item の分だけ表しており、入力し、取得するデータが決まってないからエラーになるのだろう。

編集ページで入力された値が残り続けること、 f.collection_select(,,,,) で選択タブの前回の表示が残っていることを確認して完了。