id
ActiveRecord の がまだ の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.save
は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)
実は、このレコードはデータベースに挿入されています。
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={}>