2017-01-22 8 views
0

Ich versuche, auf eine Seite zu verlinken, die die besten Antworten für jeden Beitrag zeigt, aber wenn ich alles aufstelle und auf den link_to-Button klicke, bekomme ich die Fehlermeldung:Konnte nicht gefunden werden mit 'id' =

Active :: RecordNotFound (Könnte finden Beitrag nicht mit 'id' =):

ich habe dies in meinen Ansichten:

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

Und ich habe meine/top Leitwegmenge um die Top-Antworten-Seite anzuzeigen:

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

Ich verstehe, dass Rails nicht weiß, welche Post beziehe ich mich auf, aber ich bin nicht sicher, was in den Ansichten, Routen ändern muss, oder Antworten Controller.

Ich habe dies auch in den Antworten Controller, die ich dachte, würde helfen, aber nicht:

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

Jede Hilfe ist sehr willkommen! Dies ist meine erste Veröffentlichung und bin komplett neu in Ruby on Rails und Programmierung. Hier

ist der vollständige Fehler von Terminal:

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

Was wie Sie Ihre Tabellen Migration aussehen? Gibt es ein Post-ID-Feld? –

+0

Es gibt ein Feld post_id für die Antworttabelle: create_table "Antworten", 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" , Standard: falsch Ende –

Antwort

0

Erste link_to ist ähnlich <a> so in Ihrer Ansicht nach sollten Sie setzen link_to in einem <a> ist wie Putting ein <a> in einem <a>. Ihrer Ansicht nach setzen:

<% 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'} %> 

In Ihrem Controller:

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

In routes.rb

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

Danke Anass, ich habe wieder Hoffnung. Ich musste auch die def set_post auf nur: id anstatt: post_id ändern und es funktionierte. Nochmals vielen Dank und ich werde dies verbessern, wenn ich mehr Punkte im Stackoverflow erziele. –

+0

Das ist, was Programmierer tun sollen, um einander zu helfen, ich bin froh, dass ich dir hätte helfen können –

0

Ich würde versuchen:

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

Es gibt mir den gleichen genauen Fehler aus irgendeinem Grund, nachdem Sie dies versucht haben. –

+0

möchte auch hinzufügen, dass die Linie, die die Fehler zeigt auf die def set_post in Antworten Controller ist: Extrahiert Quelle (um Zeile # 46): privat def set_post @post = Post.find (params [: post_id]) Ende –

Verwandte Themen