ログイン状態のユーザーが、URLを直接入力して売却済み商品の商品購入ページへ遷移しようとすると、トップページに遷移すること
class ItemsController < ApplicationController
before_action :authenticate_user!, except: [:index]
before_action :set_item, only: [:edit, :update, :show, :destroy]
def index
@items = Item.all.order("created_at DESC")
end
def new
@item = Item.new
end
def create
@item = Item.new(item_params)
if @item.save
redirect_to root_path
else
render :new
end
end
def edit
end
def update
if @item.save
redirect_to item_path
else
render :edit
end
end
def show
end
def destroy
if current_user.id == @item.user_id
@item.destroy
end
redirect_to root_path
end
private
def item_params
params.require(:item).permit(:name, :image, :describe, :category_id, :condition_id, :delivery_fee_id, :prefecture_id, :datetime_id, :price, :user).merge(user_id: current_user.id)
end
def set_item
@item = Item.find(params[:id])
end
end
# params {A: aa, item:{name: jj} ,B:b}
# param.require(:item).permit(:name)
<%= render "shared/header" %>
<%# 商品の概要 %>
<div class="item-show">
<div class="item-box">
<h2 class="name">
<%= @item.name %>
</h2>
<div class='item-img-content'>
<%= image_tag @item.image.variant(resize: '630x500') ,class:"item-box-img" if @item.image.attached? %>
<%# 商品が売れている場合は、sold outを表示しましょう %>
<% if @item.order %>
<div class='sold-out'>
<span>Sold Out!!</span>
</div>
<%end%>
<%# //商品が売れている場合は、sold outを表示しましょう %>
</div>
<div class="item-price-box">
<span class="item-price">
¥ <%= @item.price %>
</span>
<span class="item-postage">
<%= @item.delivery_fee.name %>
</span>
</div>
<%# ログインしているユーザーと出品しているユーザーが、同一人物の場合と同一人物ではない場合で、処理を分けましょう %>
<% if user_signed_in? %>
<% if current_user.id == @item.user_id %>
<%= link_to '商品の編集', edit_item_path(@item.id), method: :get, class: "item-red-btn" %>
<p class='or-text'>or</p>
<%= link_to '削除', item_path(@item.id), method: :delete, class:'item-destroy' %>
<% else %>
<%# 商品が売れていない場合はこちらを表示しましょう %>
<%= link_to '購入画面に進む',item_orders_path(@item.id) ,class:"item-red-btn" %>
<%# //商品が売れていない場合はこちらを表示しましょう %>
<% end %>
<% end %>
<%# //ログインしているユーザーと出品しているユーザーが、同一人物の場合と同一人物ではない場合で、処理を分けましょう %>
<div class="item-explain-box">
<span><%= @item.describe %></span>
</div>
<table class="detail-table">
<tbody>
<tr>
<th class="detail-item">出品者</th>
<td class="detail-value"><%= @item.user.nickname %></td>
</tr>
<tr>
<th class="detail-item">カテゴリー</th>
<td class="detail-value"><%= @item.category.name %></td>
</tr>
<tr>
<th class="detail-item">商品の状態</th>
<td class="detail-value"><%= @item.condition.name %></td>
</tr>
<tr>
<th class="detail-item">配送料の負担</th>
<td class="detail-value"><%= @item.delivery_fee.name %></td>
</tr>
<tr>
<th class="detail-item">発送元の地域</th>
<td class="detail-value"><%= @item.prefecture.name %></td>
</tr>
<tr>
<th class="detail-item">発送日の目安</th>
<td class="detail-value"><%= @item.datetime.name %></td>
</tr>
</tbody>
</table>
<div class="option">
<div class="favorite-btn">
<%= image_tag "star.png" ,class:"favorite-star-icon" ,width:"20",height:"20"%>
<span>お気に入り 0</span>
</div>
<div class="report-btn">
<%= image_tag "flag.png" ,class:"report-flag-icon" ,width:"20",height:"20"%>
<span>不適切な商品の通報</span>
</div>
</div>
</div>
<%# /商品の概要 %>
<div class="comment-box">
<form>
<textarea class="comment-text"></textarea>
<p class="comment-warn">
相手のことを考え丁寧なコメントを心がけましょう。
<br>
不快な言葉遣いなどは利用制限や退会処分となることがあります。
</p>
<button type="submit" class="comment-btn">
<%= image_tag "comment.png" ,class:"comment-flag-icon" ,width:"20",height:"25"%>
<span>コメントする<span>
</button>
</form>
</div>
<div class="links">
<a href="#" class="change-item-btn">
< 前の商品
</a>
<a href="#" class="change-item-btn">
後ろの商品 >
</a>
</div>
<a href="#" class='another-item'><%= @item.category.name %>をもっと見る</a>
</div>
<%= render "shared/footer" %>
app/views/show.html.erbはitemコントローラで@itemを定義しているから、@item.orderで条件分岐する.
しかしapp/views/index.html.erbはitem.orderで定義している
<%= render "shared/header" %>
<div class='main'>
<%# 画面上部の「人生を変えるフリマアプリ」帯部分 %>
<div class='title-contents'>
<h2 class='service-title'>
人生を変えるフリマアプリ
</h2>
<p class='service-explain'>
FURIMAはだれでもかんたんに出品・購入できる
</p>
<p class='service-explain'>
フリマアプリです
</p>
<div class='store-btn'>
<%= link_to image_tag("https://linkmaker.itunes.apple.com/ja-jp/badge-lrg.svg?releaseDate=2011-09-21&kind=iossoftware&bubble=ios_apps", class:"apple-btn"), "#" %>
<%= link_to image_tag("dl-android.png", class:"google-btn"), "#" %>
</div>
</div>
<%# /画面上部の「人生を変えるフリマアプリ」帯部分 %>
<%# FURIMAが選ばれる3つの理由部分 %>
<div class='select-reason-contents'>
<h2 class='title'>
FURIMAが選ばれる3つの理由
</h2>
<ul class='reason-lists'>
<li class='list'>
<%= image_tag "furima-intro01.png", class:"list-pict" %>
<span class='reason-list-number'>1</span>
<h3 class='reason-list-text'>
<span class='reason-list-blue-text'>3分</span>
ですぐに出品
</h3>
<p class='reason-list-description'>
スマホで入力するだけで簡単に出品できる!
</p>
</li>
<li class='list'>
<%= image_tag "furima-intro02.png", class:"list-pict" %>
<span class='reason-list-number'>2</span>
<h3 class='reason-list-text'>
<span class='reason-list-blue-text'>シンプル</span>
で使いやすい
</h3>
<p class='reason-list-description'>
めんどくさい入力は必要なく、検索も購入もスムーズ!
</p>
</li>
<li class='list'>
<%= image_tag "furima-intro03.png", class:"list-pict" %>
<span class='reason-list-number'>3</span>
<h3 class='reason-list-text'>
手数料
<span class='reason-list-blue-text'>業界最安</span>
</h3>
<p class='reason-list-description'>
10%でお得に出品&購入!
</p>
</li>
</ul>
</div>
<%# /FURIMAが選ばれる3つの理由部分 %>
<%# 画面中央の「会員数日本一位」帯部分 %>
<div class='ad-contents'>
<h2 class='ad-title'>
会員数日本一位
</h2>
<p class='ad-explain'>
FURIMAは、フリマアプリで最も人気。
</p>
<p class='ad-explain'>
出品・購入回数も業界最多です!
</p>
<p class='ad-explain'>
ほしかったあの商品に出会えるかもしれません。
</p>
<div class='store-btn'>
<%= link_to image_tag("https://linkmaker.itunes.apple.com/ja-jp/badge-lrg.svg?releaseDate=2011-09-21&kind=iossoftware&bubble=ios_apps", class:"apple-btn"), "#" %>
<%= link_to image_tag("dl-android.png", class:"google-btn"), "#" %>
</div>
</div>
<%# /画面中央の「会員数日本一位」帯部分 %>
<%# FURIMAの特徴 %>
<div class='feature-contents'>
<h2 class='title'>
FURIMAの特徴
</h2>
<ul class='feature-lists'>
<li class='list'>
<%= image_tag "furima-intro04.png", class:"list-pict" %>
<h3 class='feature-list-text'>
簡単に売り買いできる
</h3>
<p class='feature-list-description'>
スマホひとつで、いつでもどこでも簡単に出品・購入が可能!
</p>
</li>
<li class='list'>
<%= image_tag "furima-intro05.png", class:"list-pict" %>
<h3 class='feature-list-text'>
売上金は即日振込みに対応
</h3>
<p class='feature-list-description'>
午前9時までに振込を依頼いただければ、翌日に指定の口座に入金いたします。
</p>
</li>
<li class='list'>
<%= image_tag "furima-intro06.png", class:"list-pict" %>
<h3 class='feature-list-text'>
様々な支払いに対応
</h3>
<p class='feature-list-description'>
お支払いは、クレジットカードだけでなく、ポイントや売上金など多彩な方法があります。
</p>
</li>
</ul>
</div>
<%# /FURIMAの特徴 %>
<%# 商品一覧 %>
<div class='item-contents'>
<h2 class='title'>ピックアップカテゴリー</h2>
<%= link_to '新規投稿商品', "#", class: "subtitle" %>
<ul class='item-lists'>
<%# 商品のインスタンス変数になにか入っている場合、中身のすべてを展開できるようにしましょう %>
<% if @items.present? %>
<% @items.each do |item| %>
<li class='list'>
<%= link_to item_path(item.id) do %>
<div class='item-img-content'>
<%= image_tag item.image, class: "item-img" %>
<%# 商品が売れていればsold outを表示しましょう %>
<% if item.order %>
<div class='sold-out'>
<span>Sold Out!!</span>
</div>
<% end %>
<%# //商品が売れていればsold outを表示しましょう %>
</div>
<div class='item-info'>
<h3 class='item-name'>
<%= item.name %>
</h3>
<div class='item-price'>
<span><%= item.price %>円<br><%= item.delivery_fee.name %></span>
<div class='star-btn'>
<%= image_tag "star.png", class:"star-icon" %>
<span class='star-count'>0</span>
</div>
</div>
</div>
<% end %>
</li>
<% end %>
<%# //商品のインスタンス変数になにか入っている場合、中身のすべてを展開できるようにしましょう %>
<%# 商品がない場合のダミー %>
<%# 商品がある場合は表示されないようにしましょう %>
<% else %>
<li class='list'>
<%= link_to '#' do %>
<%= image_tag "https://s3-ap-northeast-1.amazonaws.com/mercarimaster/uploads/captured_image/content/10/a004.png", class: "item-img" %>
<div class='item-info'>
<h3 class='item-name'>
商品を出品してね!
</h3>
<div class='item-price'>
<span>99999999円<br>(税込み)</span>
<div class='star-btn'>
<%= image_tag "star.png", class:"star-icon" %>
<span class='star-count'>0</span>
</div>
</div>
</div>
<% end %>
</li>
<% end %>
<%# //商品がある場合は表示されないようにしましょう %>
<%# /商品がない場合のダミー %>
</ul>
</div>
<%# /商品一覧 %>
</div>
<%= link_to(new_item_path, class: 'purchase-btn') do %>
<span class='purchase-btn-text'>出品する</span>
<%= image_tag 'icon_camera.png' , size: '185x50' ,class: "purchase-btn-icon" %>
<% end %>
<%= render "shared/footer" %>
理由は簡単。each文でitemのブロック変数を定義していて、それをファイルの中で使うから