前提・実現したいこと
テーブルのカラムにinteger型として、保存したい。
発生している問題・エラーメッセージ
某フリマアプリの模倣アプリを作成中、enumを使用してselectタグを作成。
itemsテーブルのshipping_daysカラムにinteger型として保存させたいが、何を選択しても0しか保存されない。
binding.pryをしてみると、
params
1=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"7YSZtU/tfjfgeOs9Uz2f1xPp74dyKPFS6w8rWkchWNbhLwaUBxGtrZOOMfyKwJea0LWYzH9Gzq4h121daXnmbA==", 2"item"=>{"images_attributes"=>{"0"=>{"content"=>#<ActionDispatch::Http::UploadedFile:0x00007ff7f5a78f88 @tempfile=#<Tempfile:/var/folders/mk/8f7vv9q95xdf64s6pz1dk_vr0000gn/T/RackMultipart20200316-66277-f8p6kq.jpeg>, @original_filename="ダウンロード (1).jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"item[images_attributes][0][content]\"; filename=\"\xE3\x82\xBF\xE3\x82\x99\xE3\x82\xA6\xE3\x83\xB3\xE3\x83\xAD\xE3\x83\xBC\xE3\x83\x88\xE3\x82\x99 (1).jpeg\"\r\nContent-Type: image/jpeg\r\n">}, 3 "1"=>{"content"=>#<ActionDispatch::Http::UploadedFile:0x00007ff7f5a6ba90 @tempfile=#<Tempfile:/var/folders/mk/8f7vv9q95xdf64s6pz1dk_vr0000gn/T/RackMultipart20200316-66277-1ggsvek.jpeg>, @original_filename="ダウンロード (2).jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"item[images_attributes][1][content]\"; filename=\"\xE3\x82\xBF\xE3\x82\x99\xE3\x82\xA6\xE3\x83\xB3\xE3\x83\xAD\xE3\x83\xBC\xE3\x83\x88\xE3\x82\x99 (2).jpeg\"\r\nContent-Type: image/jpeg\r\n">}}, 4"name"=>"あああああ", "description"=>"あああああ", "parent_name"=>"メンズ", "brand_id"=>"3", 5"condition"=>"傷や汚れあり", "fee"=>"着払い(購入者が負担)", 6"shipping_days"=>"4〜7日後に発送", "area"=>"茨城県", "price"=>"4000"}, 7"category_id"=>"100", "commit"=>"出品する", "controller"=>"items", "action"=>"create"} 8permitted: false>
feeカラムやconditionカラムは、この後ちゃんとinteger型に変換されている。
該当のソースコード
item.rb
ruby
1class Item < ApplicationRecord 2 3 enum condition: { 4 '新品、未使用':1, '未使用に近い':2, '目立った傷や汚れなし':3, 'やや傷や汚れあり':4, '傷や汚れあり':5, '全体的に状態が悪い':6 5 } 6 enum fee: { 7 '送料込み(出品者が負担)':1, '着払い(購入者が負担)':2 8 } 9 10 11 enum shipping_day: { 12 '1〜2日後に発送':1, '2〜3日後に発送':2, '4〜7日後に発送':3 13 } 14 15 enum prefecture: { 16 北海道:1, 青森県:2, 秋田県:3, 岩手県:4, 山形県:5, 宮城県:6, 福島県:7, 栃木県:8, 茨城県:9, 群馬県:10, 17 埼玉県:11, 東京都:12, 千葉県:13, 神奈川県:14, 新潟県:15, 長野県:16, 岐阜県:17, 石川県:18, 福井県:19, 富山県:20, 18 山梨県:21, 静岡県:22, 愛知県:23, 三重県:24, 滋賀県:25, 和歌山県:26, 奈良県:27, 京都府:28, 大阪府:29, 兵庫県:30, 19 岡山県:31, 鳥取県:32, 島根県:33, 広島県:34, 山口県:35, 香川県:36, 徳島県:37, 愛媛県:38, 高知県:39, 福岡県:40, 20 佐賀県:41, 長崎県:42, 大分県:43, 熊本県:44, 宮崎県:45, 鹿児島県:46, 沖縄県:47 21 } 22 23 belongs_to :brand, optional: true 24 belongs_to :user, optional: true 25 belongs_to :category, optional: true 26 has_many :images, dependent: :destroy 27 accepts_nested_attributes_for :images, allow_destroy: true 28end
new.html.haml
ruby
1.main-items 2 = form_with model: @item, local: true do |f| 3 .wrapper.image-wrapper 4 #image-box.image-wrapper__image-box 5 = f.fields_for :images do |i| 6 .image-wrapper__image-box__js.js-file_group{data:{index: "#{i.index}"}} 7 = i.label :content, class: "image-wrapper__image-box__js__label" do 8 .image-wrapper__image-box__js__label__image.img_field{id: "img_field--#{i.index}", onClick: "$('#file').click()"} 9 - if @item.images[i.index][:content].present? 10 = image_tag(f.image.content) 11 - else 12 = image_tag 'icon_camera.png', class: "image-wrapper__image-box__js__label__image__url" 13 = i.file_field :content, class: "image-wrapper__image-box__js__label__file js-file", id: "item_images_attributes_#{i.index}_content", required: "required" 14 .js-remove 15 %span.js-remove__text 16 削除 17 18 19 .wrapper.name-wrapper 20 %label.wrapper__label 21 商品名: 22 %span.required 23 ※必須 24 = f.text_field :name, placeholder: "40字まで", class: "name-wrapper__name form-control", required: "required" 25 .wrapper.description-wrapper 26 %label.wrapper__label 27 商品説明: 28 %span.required 29 ※必須 30 = f.text_area :description, placaeholder: "色・素材・重さ・定価・注意点などを書きましょう(1000文字まで)", class: "name-wrapper__description form-control", required: "required", size: "40 x 10" 31 .form-separator 32 33 .wrapper.category-wrapper 34 = f.label :category_id , class: 'wrapper__label category-wrapper-label', id: "wrapper__label--category" do 35 カテゴリー: 36 %span.required ※必須 37 .category-wrapper-box 38 .category-wrapper-select 39 .category-wrapper-select__box 40 = f.select :parent_name, @category_parent_array, {}, {class: 'category-wrapper__category form-control', id: 'parent_category'} 41 42 43 .wrapper.brand-wrapper 44 %label.wrapper__label 45 ブランド: 46 = f.select :brand_id, options_for_select(@brands.map{|b| [b.name, b.id, {}]}), {prompt: "指定なし"}, class: "brand-wrapper__brand form-control" 47 48 .wrapper.condition-wrapper 49 %label.wrapper__label 50 商品の状態: 51 %span.required 52 ※必須 53 = f.select :condition, Item.conditions.keys, {prompt: "指定なし", selected: 1}, {class: "condition-wrapper__condition form-control", required: "required"} 54 .form-separator 55 56 .wrapper.fee-wrapper 57 %label.wrapper__label 58 配送料の負担: 59 %span.required 60 ※必須 61 = f.select :fee, Item.fees.keys, { prompt: "", selected: 1}, class: "fee-wrapper__fee form-control", required: "required" 62 63 .wrapper.shipping_days-wrapper 64 %label.wrapper__label 65 発送日の目安: 66 %span.required 67 ※必須 68 = f.select :shipping_days, Item.shipping_days.keys, {prompt: "", selected: 1}, class: "shipping_days-wrapper__shipping-days form-control", required: "required" 69 .wrapper.area-wrapper 70 %label.wrapper__label 71 発送元の地域: 72 %span.required 73 ※必須 74 = f.select :area, Item.prefectures.keys, {prompt: 1, selected: 1}, class: "area-wrapper__area form-control", required: "required" 75 .form-separator 76 77 .wrapper.price-wrapper 78 %label.wrapper__label 79 価格: 80 %span.required 81 ※必須 82 = f.number_field :price, class: "price-wrapper__price form-control", required: "required" 83 84 .wrapper.submit-wrapper 85 = f.submit "出品する", class: "btn submit-wrapper__submit-btn"
schema.rb
ruby
1create_table "items", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| 2 t.string "name", null: false 3 t.text "description", null: false 4 t.integer "price", null: false 5 t.integer "condition", null:false 6 t.integer "fee", null: false 7 t.string "area", null: false 8 t.integer "shipping_days", null: false 9 t.string "customer_id" 10 t.bigint "user_id" 11 t.bigint "brand_id" 12 t.bigint "category_id", null: false 13 t.index ["brand_id"], name: "index_items_on_brand_id" 14 t.index ["category_id"], name: "index_items_on_category_id" 15 t.index ["user_id"], name: "index_items_on_user_id" 16 end
items_controller.rb
ruby
1def new 2 @item = Item.new 3 @brands = Brand.all 4 5 @category_parent_array = ["指定なし"] 6 Category.where(ancestry: nil).each do |parent| 7 @category_parent_array << parent.name 8 end 9 10 @item.images.build 11 end 12 13def create 14 binding.pry 15 @item = Item.new(item_params) 16 17 if @item.save! 18 @image = @item.images.create 19 redirect_to :root 20 else 21 render :new 22 end 23 24 end 25 26private 27 def item_params 28 params.require(:item).permit( 29 :name, :description, :price, :brand_id, :area, :condition, :fee, 30 :shipping_days, images_attributes: [:content, :id, :_destroy] 31 ).merge(user_id: current_user.id, category_id: params[:category_id], brand_id: params[:item][:brand_id]) 32 end
補足情報(FW/ツールのバージョンなど)
Ruby 2.5.1p57
Ruby on rails 5.2.3
haml-rails 2.0.1
CarrierWave 2.1.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/16 12:14