質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

integer

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

1回答

1229閲覧

カラムにinteger型として保存されない。

SomaSekimoto

総合スコア9

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

integer

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2020/03/16 03:30

編集2020/03/16 03:45

前提・実現したいこと

テーブルのカラムに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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

diff

1- enum shipping_day: { 2+ enum shipping_days: {

ではないでしょうか?

投稿2020/03/16 07:03

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SomaSekimoto

2020/03/16 12:14

そうでした! ここのshipping_daysをカラム名と同じにしなければならないことを知りませんでした。 ご指摘ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問