2016-11-29 2 views
1

Ich suche eine Lösung auf Stackoverflow, aber es gibt verschiedene Probleme jedes Mal, so entschied ich mich, die Frage zu stellen. Auf meiner Bewerbung habe ich Reisen, die viele Beiträge hat. Ein Benutzer kann viele Reisen mit vielen Beiträgen auf einer Reise erstellen. Aber wenn ich versuche, einen Beitrag zu erstellen, ich habe diesen Fehler:ActiveRecord Konnte nicht finden mit 'ID' =

ActiveRecord::RecordNotFound in PostsController#create 
Couldn't find Travel with 'id'= 

Ich verstehe nicht, warum, also, wenn mir jemand helfen könnte .. Hier meine Posts_controller.rb ist (Aktion erstellen):

def create 
    @travel = Travel.find(params[:id]) 
    @post = @travel.posts.new(posts_params) 
    @post.user = current_user 
    if @post.save 
     flash[:success] = "Your post is published" 
     redirect_to user_path(current_user) 
    else 
     render 'new' 
    end 
end 

Hier ist meine Modelle:

class Post < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :travel 

    geocoded_by :country 
    after_validation :geocode 
end 

class Travel < ApplicationRecord 
    has_many :posts 
    belongs_to :user 
end 

Meine Routen:

# Travel 
    resources :travels, :shallow => true do 
     # Posts 
     resources :posts 
    end 

Und ein ligne für Form:

<%= form_for(@post, :html => {class: "form-horizontal", role: "form"}, :url => travel_posts_path(@travel)) do |f| %> 
     <div class="form-group"> 
      <%= f.text_field :travel_id, placeholder: @travel.id %> 
     </div> 
+0

Warum erlauben Sie dem Benutzer, ID's zu behandeln? Das ist eine schlechte Übung. – Dbz

+1

Ich würde vorschlagen, 'params' zu debuggen. Möglicherweise müssen Sie stattdessen etwas wie "params [: travel_id]" tun. Aber ich würde immer noch nicht zulassen, dass Benutzer IDs wählen. – Dbz

+0

@Dbz Ich versuche nur, die Reise-ID in der Spalte: travel_id meiner Tabelle hinzuzufügen, das Feld im Formular ist nur hier, um mir zu helfen, ich werde diese Zeile entfernen, wenn es funktioniert –

Antwort

1

params[:id] geben Ihnen die post ‚s id, und Sie verwenden eine travel zu finden. Dies könnte möglicherweise kein Fehler sein und Ihnen die falsche Reise geben, aber das ist nicht, was Sie suchen. Sie haben in Ihrem Formular travel_id angegeben. Sie suchen also nach params[:travel_id].

In der Zukunft möchten Sie möglicherweise die debugger direkt an der Spitze der Controller-Funktion und puts das params Objekt verwenden, um zu sehen, was drin ist. Dies gibt Ihnen Einblick, wenn Sie die falsche key s aufrufen und wie die Struktur aussieht, wie die Dinge kompliziert werden.

+0

Vielen Dank es funktioniert wie ich wollte! –

Verwandte Themen