2

idActiveRecord の がまだ のnil後にあるのは、本当に厄介ですsave

コンソールでの私のコマンドは次のとおりです。

irb(main):003:0> c = Comment.new
=> #<Comment id: nil, commentable_id: nil, commentable_type: nil, user_id: nil, content: "", del_flg: 0, created_at: nil>
irb(main):004:0> c.commentable = Moment.last
  Moment Load (0.2ms)  SELECT `moments`.* FROM `moments` ORDER BY `moments`.`id` DESC LIMIT 1
=> #<Moment id: 119583...
irb(main):005:0> c.user = User.find(119)
  User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 119 LIMIT 1
=> #<User id: 119...
irb(main):006:0> c.save
   (0.2ms)  BEGIN
  SQL (0.6ms)  INSERT INTO `comments` (`commentable_id`, `commentable_type`, `content`, `created_at`, `del_flg`, `id`, `user_id`) VALUES (119583, 'Moment', '', '2013-01-22 15:19:05', 0, NULL, 119)
   (0.1ms)  COMMIT
=> true
irb(main):007:0> c
=> #<Comment id: nil, commentable_id: 119583, commentable_type: "Moment", user_id: 119, content: "", del_flg: 0, created_at: "2013-01-22 15:19:05">
irb(main):008:0> c.id
=> nil

これは私が自分の記録を定義した方法です:

class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :commentable, polymorphic: true
end

最初は、MySQL データベースにid設定されていないのではないかと思ったので、確認しました。PRIMARY KEY

 mysql> describe comments;
 +------------------+--------------+------+-----+---------+----------------+
 | Field            | Type         | Null | Key | Default | Extra          |
 +------------------+--------------+------+-----+---------+----------------+
 | id               | int(11)      | NO   | PRI | NULL    | auto_increment |
 | commentable_id   | int(11)      | NO   | MUL | NULL    |                |
 | commentable_type | varchar(100) | NO   | MUL | NULL    |                |
 | user_id          | int(11)      | NO   |     | NULL    |                |
 | content          | text         | NO   |     | NULL    |                |
 | del_flg          | tinyint(4)   | NO   |     | 0       |                |
 | created_at       | datetime     | NO   |     | NULL    |                |
 +------------------+--------------+------+-----+---------+----------------+

これがどのように起こるかについて誰にも考えがありますか?前もって感謝します。

編集

のSQLの説明c.saveINSERT INTO comments (commentable_id, commentable_type, content, created_at, del_flg, id, user_id) VALUES (119583, 'Moment', '', '2013-01-22 15:19:05', 0, NULL, 119)

実は、このレコードはデータベースに挿入されています。

mysql> select * from comments where commentable_id = 119583 and commentable_type = "Moment"
-> ;
+-------+----------------+------------------+---------+---------+---------+---------    ------------+
| id    | commentable_id | commentable_type | user_id | content | del_flg |     created_at          |
+-------+----------------+------------------+---------+---------+---------+---------------------+
| 26582 |         119583 | Moment           |     119 |         |       0 | 2013-01-22 14:58:22 |
| 26583 |         119583 | Moment           |     119 |         |       0 | 2013-01-22 15:09:11 |
| 26585 |         119583 | Moment           |     119 |         |       0 | 2013-01-22 15:19:05 |
| 26586 |         119583 | Moment           |     119 |         |       0 | 2013-01-22 15:38:14 |
+-------+----------------+------------------+---------+---------+---------+---------------------+

その他のテスト:

irb(main):009:0> c.persisted?
=> true
irb(main):010:0> c.errors
=> #<ActiveModel::Errors:0x00000004761958 @base=#<Comment id: nil, commentable_id: 119583, commentable_type: "Moment", user_id: 119, content: "", del_flg: 0, created_at: "2013-01-22 16:52:59">, @messages={}>
4

0 に答える 0