2017-06-29 3 views
0

Ich habe eine POST-Definition:Verwendung existiert? mit dynamischem Begriff

def create 
    if Movie.exists?(title: 'The Batman') 
    # your truck exists in the database 
    render json: { body: 'Movie already exists'} 
    else 
    # the truck doesn't exists 
    @movie = Movie.create!(movie_params) 
    json_response(@movie, :created) 
    end 

end 

Diese Definition überprüft, ob es bereits ein Film mit dem Titel The Batman ist, wenn so gibt sie die json Nachricht. Wenn dies nicht der Fall ist, wird der Film erstellt.

Wenn ich meine Anwendung mit diesem Code ausführen bekomme ich dies in meinem Rails log:

Film vorhanden ist (0,5 ms) SELECT 1 Wie man aus movies WHERE movies. title = 'The Batman' LIMIT 1

Das Problem ist, dass ich "The Batman" hart codiert habe. Wie kann ich mit dem Titel des Films, der vom Front-End hochgeladen wird, arbeiten?

Ich habe auch versucht, dieses:

if Movie.exists?(title: @movies.title) 

NoMethodError (nicht definierte Methode `Titel‘ für nil: NilClass):

Und:

if Movie.exists?(title: Movie.title) 

NoMethodError (undefinierte Methode `title 'für #):

Ich habe die API gelesen, aber sie verwenden auch statische Daten anstelle von dynamischen Daten.

Antwort

3

Huh? holen Sie es einfach aus params

Movie.exists?(title: movie_params[:title]) 
+0

Sieht gut aus, aber auf diese Weise nicht in der API http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-exists-3F so gezeigt Wie soll ich es gewusst haben? –

+0

@PeterBoomsma: durch Lesen von Rails-Buch oder Tutorial. –

+0

Ich habe ziemlich viel mit Rails 4 gearbeitet, aber nie eine Annotation wie diese gesehen. –