我有一个使用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:在 `创建'
我该如何调试?
答案 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
然后你可以根据需要自由探索。