フリマアプリ作成にて、アクティブストレージ導入済、アソシエーション、プライベートメソッドにも:imageは記述しております
ruby
1class ItemsController < ApplicationController 2 before_action :authenticate_user!, except: [:index] 3 def index 4 @item = Item.all 5 end 6 7 def new 8 @item = Item.new 9 end 10 11 def create 12 @item = Item.new(item_params) 13 if @item.save 14 redirect_to root_path 15 else 16 render :new 17 end 18 end 19 20 private 21 22 def item_params 23 params.require(:item).permit(:name, :price, :category_id, :condition_id, :postage_id, :region_id, :shipping_date_id, :description, :image).merge(user_id: current_user.id) 24 end 25 26end
ruby
1class Item < ApplicationRecord 2 extend ActiveHash::Associations::ActiveRecordExtensions 3 4 5 belongs_to :user 6 has_one :purchase 7 has_one_attached :image 8 9 with_options presence: true do 10 validates :name 11 validates :price, numericality: { greater_than_or_equal_to: 300, less_than_or_equal_to: 9_999_999 } 12 validates :category_id 13 validates :condition_id 14 validates :postage_id 15 validates :region_id 16 validates :shipping_date_id 17 validates :description 18 validates :image 19 end 20 21end
ruby
1<div class="items-sell-contents"> 2 <header class="items-sell-header"> 3 <%= link_to image_tag('furima-logo-color.png' , size: '185x50'), "/" %> 4 5 </header> 6 <div class="items-sell-main"> 7 <h2 class="items-sell-title">商品の情報を入力</h2> 8 <%= form_with model: @item, local: true do |f| %> 9 10 <%# インスタンスを渡して、エラー発生時にメッセージが表示されるようにしましょう。%> 11 <%= render 'shared/error_messages', model: f.object %> 12 <%# //インスタンスを渡して、エラー発生時にメッセージが表示されるようにしましょう。%> 13 14 <%# 出品画像 %> 15 <div class="img-upload"> 16 <div class="weight-bold-text"> 17 出品画像 18 <span class="indispensable">必須</span> 19 </div> 20 <div class="click-upload"> 21 <p> 22 クリックしてファイルをアップロード 23 </p> 24 <%= f.file_field :image, id:"item-image" %> 25 <%= image_tag item.image.variant(resize: '500x500'), class: 'item-image' if @item.image.attached? %> 26 </div> 27 </div> 28 <%# /出品画像 %> 29 <%# 商品名と商品説明 %> 30 <div class="new-items"> 31 <div class="weight-bold-text"> 32 商品名 33 <span class="indispensable">必須</span> 34 </div> 35 <%= f.text_area :name, class:"items-text", id:"item-name", placeholder:"商品名(必須 40文字まで)", maxlength:"40" %> 36 <div class="items-explain"> 37 <div class="weight-bold-text"> 38 商品の説明 39 <span class="indispensable">必須</span> 40 </div> 41 <%= f.text_area :description, class:"items-text", id:"item-info", placeholder:"商品の説明(必須 1,000文字まで)(色、素材、重さ、定価、注意点など)例)2010年頃に1万円で購入したジャケットです。ライトグレーで傷はありません。あわせやすいのでおすすめです。" ,rows:"7" ,maxlength:"1000" %> 42 </div> 43 </div> 44 <%# /商品名と商品説明 %> 45 46 <%# 商品の詳細 %> 47 <div class="items-detail"> 48 <div class="weight-bold-text">商品の詳細</div> 49 <div class="form"> 50 <div class="weight-bold-text"> 51 カテゴリー 52 <span class="indispensable">必須</span> 53 </div> 54 <%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:"select-box", id:"item-category"}) %> 55 <div class="weight-bold-text"> 56 商品の状態 57 <span class="indispensable">必須</span> 58 </div> 59 <%= f.collection_select(:condition_id, Condition.all, :id, :name, {}, {class:"select-box", id:"item-sales-status"}) %> 60 </div> 61 </div> 62 <%# /商品の詳細 %> 63 64 <%# 配送について %> 65 <div class="items-detail"> 66 <div class="weight-bold-text question-text"> 67 <span>配送について</span> 68 <a class="question" href="#">?</a> 69 </div> 70 <div class="form"> 71 <div class="weight-bold-text"> 72 配送料の負担 73 <span class="indispensable">必須</span> 74 </div> 75 <%= f.collection_select(:postage_id, Postage.all, :id, :name, {}, {class:"select-box", id:"item-shipping-fee-status"}) %> 76 <div class="weight-bold-text"> 77 発送元の地域 78 <span class="indispensable">必須</span> 79 </div> 80 <%= f.collection_select(:region_id, Region.all, :id, :name, {}, {class:"select-box", id:"item-prefecture"}) %> 81 <div class="weight-bold-text"> 82 発送までの日数 83 <span class="indispensable">必須</span> 84 </div> 85 <%= f.collection_select(:shipping_date_id, ShippingDate.all, :id, :data, {}, {class:"select-box", id:"item-scheduled-delivery"}) %> 86 </div> 87 </div> 88 <%# /配送について %> 89 90 <%# 販売価格 %> 91 <div class="sell-price"> 92 <div class="weight-bold-text question-text"> 93 <span>販売価格<br>(¥300〜9,999,999)</span> 94 <a class="question" href="#">?</a> 95 </div> 96 <div> 97 <div class="price-content"> 98 <div class="price-text"> 99 <span>価格</span> 100 <span class="indispensable">必須</span> 101 </div> 102 <span class="sell-yen">¥</span> 103 <%= f.text_field :price, class:"price-input", id:"item-price", placeholder:"例)300" %> 104 </div> 105 <div class="price-content"> 106 <span>販売手数料 (10%)</span> 107 <span> 108 <span id='add-tax-price'></span>円 109 </span> 110 </div> 111 <div class="price-content"> 112 <span>販売利益</span> 113 <span> 114 <span id='profit'></span>円 115 </div> 116 </span> 117 </div> 118 </div> 119 <%# /販売価格 %> 120 121 <%# 注意書き %> 122 <div class="caution"> 123 <p class="sentence"> 124 <a href="#">禁止されている出品、</a> 125 <a href="#">行為</a> 126 を必ずご確認ください。 127 </p> 128 <p class="sentence"> 129 またブランド品でシリアルナンバー等がある場合はご記載ください。 130 <a href="#">偽ブランドの販売</a> 131 は犯罪であり処罰される可能性があります。 132 </p> 133 <p class="sentence"> 134 また、出品をもちまして 135 <a href="#">加盟店規約</a> 136 に同意したことになります。 137 </p> 138 </div> 139 <%# /注意書き %> 140 <%# 下部ボタン %> 141 <div class="sell-btn-contents"> 142 <%= f.submit "出品する", class:"sell-btn" %> 143 <%=link_to 'もどる', root_path, class:"back-btn" %> 144 </div> 145 <%# /下部ボタン %> 146 </div> 147 <% end %> 148 149 <footer class="items-sell-footer"> 150 <ul class="menu"> 151 <li><a href="#">プライバシーポリシー</a></li> 152 <li><a href="#">フリマ利用規約</a></li> 153 <li><a href="#">特定商取引に関する表記</a></li> 154 </ul> 155 <%= link_to image_tag('furima-logo-color.png' , size: '185x50'), "/" %> 156 <p class="inc"> 157 ©︎Furima,Inc. 158 </p> 159 </footer> 160</div>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/29 01:06
2020/10/29 01:09