

`activerecord`で保存したばかりのデータの`id`を取得したいのですがうまくググれない(他の情報ばかりヒットする)ので教えて下さい。

イメージ

[code]

    data = User.create(:name => hoge)
    p data.id # 今作ったデータのID
    
[/code]

また、今回の情報がヒットする検索ワードなどを教えて下さい。

追記

`data.attributes['id']`にて取得することはできました。  
このやり方で問題はないでしょうか。


CC BY-SA 3.0
2015-02-02T02:29:11.367
5725
2015-02-17T10:19:06.673
2015-02-02T02:55:57.637
7339
7339
question
ruby rails-activerecord
activerecordで保存したデータのidの取得の方法を教えてください


手元のrails consoleで試す限り、 `data.id` のような形でもでidを取得できました。

[code]

    irb(main):001:0> c = Company.create :name => 'hoge'
    => #<Company id: 4, name: "hoge", created_at: "2015-02-02 03:53:58", updated_at: "2015-02-02 03:53:58">
    irb(main):002:0> c.id
    => 4
    
[/code]

おそらくですが、どこかでバリデーションエラーが発生しているのではないでしょうか？

[code]

    # nameが必須の場合
    irb(main):004:0> c = Company.create :name => ''
    => #<Company id: nil, name: "", created_at: nil, updated_at: nil>
    irb(main):005:0> c.id
    => nil
    irb(main):006:0> c.valid?
    => false
    irb(main):007:0> c.errors
    => #<ActiveModel::Errors:0x007ffc5b8646d8 @base=#<Company id: nil, name: "", created_at: nil, updated_at: nil, @messages={:name=>["を入力してください。"]}>
    
[/code]

idが取得できない場合、`data.valid?` の戻り値を確認してください。  
`false` であればバリデーションエラーが発生しているので保存できていません。  
`data.errors` でエラーの内容を確認してください。

> data.attributes['id']にて取得することはできました。  
>  このやり方で問題はないでしょうか。

僕の場合、`data.attributes['id']`のような取得の仕方はしないです。`data.id`で取得する場合がほとんどです。  
`data.attributes['id']`でしか取得できない、ということはおそらくないと思うので、根本原因を究明した方がよいと思います。


CC BY-SA 3.0
2015-02-02T03:59:31.457
5739
2015-02-02T04:06:37.377
2015-02-02T04:06:37.377
85
85
5725
answer


まさかの万が一ってことがあるので。

[code]

    class User < ActiveRecord::Base
      def id
      end
    end
    user = User.cerate(nane: 'nazka')
    => #<User: 1, name: "nazka">
    user.id
    => nil
    user.attributes['id']
    => 1
    
[/code]

idメソッド定義していたりしませんかね？  
たぶん User.first.id('hogehoge'...)とかやると  
ArgumentError: wrong number of arguments (1 for 0)  
みたいなエラーになって、本来なら from ...activerecord-4.1.9/lib/active_record/...
みたいに、gemの中でエラーになると思いますが……。どうですかね。  
※ できれば。使っているアダプタが何かのか教えて欲しいです。


CC BY-SA 3.0
2015-02-17T10:10:12.903
6639
2015-02-17T10:19:06.673
2015-02-17T10:19:06.673
8335
8335
5725
answer