2016-06-08 12 views
0

In meinem routes.rb Datei erzeugt Link Ich habe:Passing ein Modellobjekt zu einem von einer benannten Route

get 'search' => 'movies#search', as: :search_directors

Und die Suche Aktion in den Filme Controller sieht so aus:

def search 
    @movie = Movie.find(params[:id]) 
    # other code 
end 

Eine der Ansichten enthält den folgenden Link:

= link_to 'Find Movies With Same Director', search_directors_path(@movie) 

Ich hatte gehofft, dass, wenn dieser Link angeklickt wird, wird die ID des @movie Objekt wird durch params verfügbar sein [: id ] in der filme # suche aktion. Aber anstatt, wenn ich auf sie Rails gibt mir diese Fehlermeldung:

ActiveRecord::RecordNotFound in MoviesController#search

Couldn't find Movie with 'id'=

Die @movie Objekt, das ich als Parameter auf die Route gültig ist vorbei, weil andere Teile der Ansicht arbeiten richtig (es ist die show.html.haml Ansicht für den Movie URI).

Antwort

2

Sie müssen die ID in Ihrer Route angeben oder als zusätzlichen Parameter übergeben (in diesem Fall wird sie an die URL als GET-Parameter angehängt).

get 'search/:id' => 'movies#search', as: :search_directors 

Oder (für GET param):

= link_to 'Find Movies With Same Director', search_directors_path(id: @movie.id) 

Im letzten Fall würden Sie eine Bedingung in Ihrer Suchmethode hinzufügen müssen, um zu testen, ob params [: id] überhaupt vorhanden ist.

0

Hope this für Sie arbeiten ...

def search 
    @movie = Movie.find(params[:id]) # this will raise ActiveRecord::RecordNotFound if id is not available in data base. 

    # you should use where instead of find 
    @movie = Movie.where(id: params[:id]).first # this will return nil if not found but not raise ActiveRecord::RecordNotFound Exceptaion. 
    # other code 
end 
Verwandte Themen