2017-01-22 64 views
0

我试图链接到一个网页,将显示每个岗位最普遍的回答,但是当我设置好一切,然后点击按钮的link_to我得到的错误信息:无法与“ID”找到后=

的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> 

我有我的/顶路由集以显示最高响应页面:

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' 
+0

,请问您对迁移表是什么样子?有没有post_id字段? –

+0

没有为响应表POST_ID场:CREATE_TABLE“回应”,力:级联做| T | t.integer “POST_ID” t.integer “user_ID的” t.text “身体” t.datetime “created_at”,空:假 t.datetime “的updated_at”,空:假 t.boolean “顶” ,默认值:false end –

回答

0

第一的link_to类似于在你看来<a>这样,你应该把的link_to一个<a>里面就像是把一个<a>一个<a>内。 您认为把:

<% 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' 
+0

谢谢Anass,我再次有希望。我也必须将def set_post更改为:id而不是:post_id并且它工作正常。再次感谢,当我在stackoverflow上获得更多积分时,我会加倍努力。 –

+0

这就是程序员的意思是要互相帮助,我很高兴我可以帮助你 –

0

我会尝试:

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

尝试此操作后,出于某种原因,它给了我相同的确切错误。 –

+0

也想添加错误指向的行是def set_post在响应控制器中:提取的源代码(在#46附近):private def set_post @post = Post.find(params [:post_id]) 结束 –