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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

6595閲覧

railsでモデルのidをランダムではなく連番という形でIDを付与したい

owen11

総合スコア36

Ruby

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2014/08/21 13:26

最近、Railsを触ったばかりの初心者ですが、表題の件質問させてください。
RailsでUserのモデルを作成すると自動的に user_id のカラムが生成され、
Userを新規作成するたびに自動的に連番が割り振られるのですが、
フィクスチャによるテストデータを投入するとIDが298486374、980190962といったランダムな数字になってしまいます。
これを1から連番付与をしたいのですが、方法があればご教示していただけると幸いです。
railsのバージョンは4でDBはsqlite3となります。
以下通りやってみましたが、何か問題があればご教示していただければと思います。

モデル作成
rails generate model user name:string showflg:integer
マイグレーションファイルによるテーブルの作成
rake db:migrate
フィクスチャによるテストデータ投入
`
one:
name: samplename1
showflg: 1

two:
name: samplename2
showflg: 1
`

rake db:fixtures:load FIXTURES=users

** 実行結果**
sqlite> select * from blogs; 298486374|samplename1|1|2014-08-21 13:09:46 980190962|samplename2|1|2014-08-21 13:09:46

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

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

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

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

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

guest

回答1

0

ベストアンサー

id を明示すればよいです。

test/fixtures/user.yml を編集します。
`
one:
id: 1
name: samplename1
showflg: 1

two:
id: 2
name: samplename2
showflg: 1
fixture を load しなおして、rails console で値を確認してみます。
$ rake db:fixtures:load
$ rails c
Loading development environment (Rails 4.1.5)
irb(main):001:0> User.all
User Load (1.5ms) SELECT "users".* FROM "users"
=> #<ActiveRecord::Relation [#<User id: 1, name: "samplename1", showflg: 1, created_at: "2014-08-21 17:13:18", updated_at: "2014-08-21 17:13:18">, #<User id: 2, name: "samplename2", showflg: 1, created_at: "2014-08-21 17:13:18", updated_at: "2014-08-21 17:13:18">]>
irb(main):002:0> exit
`
ここでは、 DB の中身をみるのを sqlite のクライアントではなく rails の consile で確認してみました。

id を指定しなかった場合は、レコード名 (one や two) の ハッシュ値が id の値としてつかわれます。多分...)

参考情報:
yml ファイルは erb で記述することが可能です。
例えば次のようにか欠く事ができます。
<% (10..12).to_a.each do |idx| %> <%= "DATA_#{idx}" %>: id: <%= idx %> name: <%= "samplename#{idx}" %> showflg: <%= idx * 100 %> <% end %>

fixteurs:load しなおして、 rails c で User.all を表示させると、次のようになるはずです。
User Load (1.6ms) SELECT "users".* FROM "users" => #<ActiveRecord::Relation [#<User id: 10, name: "samplename10", showflg: 1000, created_at: "2014-08-21 17:40:09", updated_at: "2014-08-21 17:40:09">, #<User id: 11, name: "samplename11", showflg: 1100, created_at: "2014-08-21 17:40:09", updated_at: "2014-08-21 17:40:09">, #<User id: 12, name: "samplename12", showflg: 1200, created_at: "2014-08-21 17:40:09", updated_at: "2014-08-21 17:40:09">]>

実際の yml がどうなっているかは、次のようにして確認できます。
`
$ erb test/fixtures/users.yml
DATA_10:
id: 10
name: samplename10
showflg: 1000

DATA_11:
id: 11
name: samplename11
showflg: 1100

DATA_12:
id: 12
name: samplename12
showflg: 1200
`

投稿2014/08/21 17:04

katoy

総合スコア22324

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

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

owen11

2014/08/22 12:15

ご回答ありがとうございます! 単純にid を明示すればいいんでしたね。 ご指摘通りやってみたら想定通りの結果が返ってきました。 また、yml ファイルは erb で記述することが可能なんですね。 知りませんでした。 頂いた情報は今後の開発に参考させていただきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問