2011-06-07 93 views
0

我有一个使用Ancestry的线程化Post。 当其他用户回复帖子我得到:rails创建错误

就行了:

@post = current_user.posts.new(params[:post]) 

在周二开始POST “/posts.js” 为127.0.0.1 07年6月13:50: 19 0300 2011
处理由PostsController#创建 如JS参数:{ “提交”=> “后”, “后”=> { “体”=> “

一个

”, “PARENT_ID”=> “5”, “discussion_id”=>“1”}, “authenticity_token”=>“RUra0Ndv67cgaGshBS5yCJMq5V6WG6OuZiqDbbWP5cc =”, “utf8”=>“✓”}用户负载(0.2ms) SELECT“users”。* FROM“users”WHERE (“users”。“id”= 33 )限制1邮政 加载(0.2ms)选择“posts”。*从 “posts”WHERE(“posts”.user_id = 33) AND(“posts”。“id”= 5)LIMIT 1 Completed 238ms

的ActiveRecord :: RecordNotFound(无法与 ID = 5找到发表[WHERE ( “职位” .user_id = 33)]):
应用程序/控制器/ posts_controller.rb:28:在 '创建'

我该如何调试?

回答

0

我第一遍会打开轨道控制台(在提示符下输入“轨控制台”),然后尝试以下操作:

>> x = Post.find(5) 

如果你发现它检查该记录的USER_ID。它确实存在吗?如果是这样,那很好知道。

接下来,我将在上面的输出中使用SQL,并在您使用的任何数据库中手动运行它。如果您使用的SQLite3你可以这样做:

>> sqlite3 db/development.sqlite3 

如果存在,那么它是一个公平一点划伤你的头。我怀疑你会发现它不在那里。

链接是否回复您在视图中手动创建的帖子?你确定它的构建是否正确 - 这两个兴趣点确实是你想让它们成为的?

如果它的构建正确,那么我会简单地在你的控制器中使用ruby调试器,并开始单步执行代码。如果你不熟悉的红宝石调试器,你可以在你的Gemfile描述得到的宝石,然后,一旦它在你的宝石,你可以添加这行代码要设置断点代码:

require 'ruby-debug'; debugger 

然后,您可以根据需要自由探索。