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

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

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

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

Q&A

解決済

1回答

4218閲覧

enum で定義したカラムにseedでデータ投入出来ない

MakitoKezuka

総合スコア18

Ruby on Rails

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

0グッド

0クリップ

投稿2016/05/30 12:47

編集2016/05/31 02:29

rails 初心者です。
railsにて、enumの機能を使って、男性女性のフラグや、その他選択肢の制御などを行っています。
ところが、enumで定義したカラムにseedでデータ投入する際に、エラーになってしまい困っています。
どのようにデータ投入すべきなのか、もしくは、enumの使い方が間違えているのか、教えて頂けますでしょうか。

<やりたいこと>
1.enumで選択肢の制御がしたい(→これはできています)
2.データベースに初期データをSeedで投入したい

<enumによるカラムの定義>
たとえば、単純な話、下記の様に定義していたとします。

性別をデータとしては、数値で格納している

#0: 男性
#1: 女性
enum sex: {male: 0, female: 1}

<Seedデータの投入>
上記の sex の項目に対して、データとしては、0として、seedデータ(正確にはCSVをseedにて読み込ませています)を記載し、rake db:seed、をすると下記のようなエラーが出ます。

ArgumentError: '0' is not a valid sex

半角が全角になっているのかとか、いろいろ思い当たることは調べたのですが、原因がわからず。
とはいえ、一旦、enumの定義を外して、データ投入した後、再度enumの定義を有効にすると、きちんと、男性、女性と数値データを振分けてくれるので、数値データとして格納されていないわけでもenumの定義方法が間違えているわけでも無さそうなのですが、何が悪いのでしょうか?

助けて頂けるとありがたいです。

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

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

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

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

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

rifuch

2016/05/31 08:20

csvを読み取って投入するときに、整数に変換(to_i)してますよね?
MakitoKezuka

2016/05/31 08:22

いえ、していないです。ひょっとして整数にしないと文字列として認識しているから?という単純な問題でしょうか?  試してみます!
guest

回答1

0

自己解決

CSVでseedデータを読み込む際に、文字列として認識していたことが問題だったようです。
rifuchさん、ご指摘ありがとうございました。

seed側を下記の通りとしたところ、問題なくデータ投入出来ました。

:sex => row[5].to_i,

投稿2016/05/31 11:43

MakitoKezuka

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問