これは、作成アクションでPostsController仕様を実行したときのデバッガーからのログです。コンソールを使用して実行時にdbレコードを変更または操作していないため、これは特別なケースではありません。
(rdb:1) p Post.last
#<Post id: 2, author_id: 3, title: "My ultra cool post", content: "Lorem ipsum", deleted_at: nil, created_at: "2012-08-31 09:21:20", updated_at: "2012-08-31 09:21:20", published_at: nil, display_from: nil>
(rdb:1) p Post.all
[#<Post id: 2, author_id: 3, title: "My ultra cool post", content: "Lorem ipsum", deleted_at: nil, created_at: "2012-08-31 09:21:20", updated_at: "2012-08-31 09:21:20", published_at: nil, display_from: nil>,
#<Post id: 3, author_id: 2, title: "My ultra cool post", content: "Lorem ipsum", deleted_at: nil, created_at: "2012-08-31 09:21:20", updated_at: "2012-08-31 09:21:20", published_at: nil, display_from: nil>]
(rdb:1) p Post.last
#<Post id: 2, author_id: 3, title: "My ultra cool post", content: "Lorem ipsum", deleted_at: nil, created_at: "2012-08-31 09:21:20", updated_at: "2012-08-31 09:21:20", published_at: nil, display_from: nil>
したがって、Post.allは、Post 3は存在するが、Post.lastは存在しないことを示しています。
しかし、私がするとき
(rdb:1) p Post.all.last
#<Post id: 3, author_id: 2, title: "My ultra cool post", content: "Lorem ipsum", deleted_at: nil, created_at: "2012-08-31 09:21:20", updated_at: "2012-08-31 09:21:20", published_at: nil, display_from: nil>
コントローラファイル:
class PostsController < ApplicationController
def create
@post.author = current_user
@post.save
debugger # this is where I'm debugging
respond_with @post
end
end
- この動作は、開発されたコードで正しく機能します
私にとっての唯一の意味は、私の仕様では私がやるということです
response.should redirect_to Post.all.last
の
response.should redirect_to Post.last
Ralisでは、DBの準備が整う前にActive Recordが呼び出しをトリガーする場合があることを知っていますか?しかし、この場合、ActiveRecordは実際には.all呼び出しでこのレコードの存在を認識していますが、.lastでは認識していないため、これは奇妙なことです
これについて何か考えはありますか?