rails创建错误

时间:2011-06-07 10:59:36

标签: ruby-on-rails activerecord

我有一个使用Ancestry的线程帖子。 当我从另一个用户回复帖子时,我得到了:

就行:

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

为127.0.0.1启动POST“/posts.js”   在07年6月17日13:50:19 + 0300 2011年   由PostsController处理#create   作为JS参数:{“commit”=>“发布”,   “后”=> { “体”=> “中

”,   “PARENT_ID”=> “中5”,   “discussion_id”=> “中1”},   “authenticity_token”=> “中RUra0Ndv67cgaGshBS5yCJMq5V6WG6OuZiqDbbWP5cc =”,   “utf8”=>“✓”}用户负载(0.2ms)   SELECT“users”。* FROM“users”WHERE   (“users”。“id”= 33)LIMIT 1 Post   加载(0.2ms)SELECT“posts”。* FROM   “posts”WHERE(“posts”.user_id = 33)   AND(“posts”。“id”= 5)LIMIT 1   完成时间为238毫秒

     

ActiveRecord :: RecordNotFound(不能   找到ID = 5的帖子[在哪里   (“posts”.user_id = 33)]):
  应用程序/控制器/ posts_controller.rb:28:在   `创建'

我该如何调试?

1 个答案:

答案 0 :(得分:0)

我的第一个传递是打开rails控制台(在提示符类型'rails console')然后尝试以下操作:

>> x = Post.find(5)

如果找到它,请检查该记录上的user_id。它确实存在吗?如果是这样,那很高兴知道。

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

>> sqlite3 db/development.sqlite3

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

是否会回复您在视图中手动创建的帖子的链接?你确定它是正确构建的 - 感兴趣的两个ID确实是你想要的吗?

如果它是正确构建的,那么我只需在控制器中使用ruby调试器并开始逐步执​​行代码。如果您不熟悉ruby调试器,您可以按照Gemfile中的描述获取gem,然后在gemset中,您可以将这行代码添加到要断开代码的位置:

require 'ruby-debug'; debugger

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