【问题标题】:Couldn't find Post with 'id'=找不到带有 'id'= 的帖子
【发布时间】:2018-06-20 12:09:28
【问题描述】:

我正在尝试链接到将显示每个帖子的热门回复的页面,但是当我设置所有内容并单击 link_to 按钮时,我收到错误消息:

ActiveRecord::RecordNotFound(找不到带有 'id'= 的帖子):

我的观点是这样的:

  <% if @post.user == current_user && @post.responses.where(top: true).size >= 1 %>
      <a href="#" class="btt"><%= link_to "finalize top", '/top' %>Finalize Top</a>

我将 /top 路由设置为显示顶部响应页面:

get '/top' => 'responses#top'

我知道 Rails 不知道我指的是哪个帖子,但我不确定视图、路由或响应控制器中需要更改什么。

我在响应控制器中也有这个,我认为这会有所帮助,但没有:

def top
  @post = Post.find(params[:post_id])
end

非常感谢任何帮助!这是我第一次发帖,对 Ruby on Rails 和编程完全陌生。

这是来自终端的完整错误:

Started GET "/top" for ::1 at 2017-01-21 21:17:03 -0500
Processing by ResponsesController#top as HTML
  Post Load (0.1ms)  SELECT  "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1  [["id", nil]]
Completed 404 Not Found in 2ms (ActiveRecord: 0.1ms)

ActiveRecord::RecordNotFound (Couldn't find Post with 'id'=):
  app/controllers/responses_controller.rb:46:in `set_post'

【问题讨论】:

  • 您的迁移表是什么样的?是否有 post_id 字段?
  • response表有一个post_id字段:create_table "responses", force: :cascade do |t| t.integer "post_id" t.integer "user_id" t.text "body" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.boolean "top", 默认: false end

标签: ruby-on-rails ruby


【解决方案1】:

首先link_to 类似于&lt;a&gt;,因此在您看来,您应该将link_to 放在&lt;a&gt; 中就像将&lt;a&gt; 放在另一个&lt;a&gt; 中一样。 在您看来:

<% if @post.user == current_user && @post.responses.where(top: true).size >= 1 %>
      <%= link_to "finalize top", { controller: :responses, action: :top, id: @post.id },{ class: 'btn btn-default'} %>

在您的控制器中:

def top
  @post = Post.find(params[:id])
end

在 routes.rb 中

get '/top' => 'responses#top'

【讨论】:

  • 谢谢阿纳斯,我又有希望了。我还必须将 def set_post 更改为 :id 而不是 :post_id 并且它起作用了。再次感谢,当我在 stackoverflow 上获得更多积分时,我会对此表示支持。
  • 这就是程序员应该做的互相帮助的事情,我很高兴我能帮助你
【解决方案2】:

我会尝试:

def top
  @post = Post.find(params[:id])
end

【讨论】:

  • 在尝试这个之后,由于某种原因,它给了我同样的错误。
  • 还想补充一点,错误指向的行是响应控制器中的 def set_post:提取的源代码(第 46 行附近):private def set_post @post = Post.find(params[ :post_id]) 结束
猜你喜欢
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多