2016-06-05 9 views
0

Ich baue eine Bibliothek in Sinatra, mit Postresql als Datenbank und einem 'googlebooks' Juwel, um die Informationen zu finden, die ich will.undefined Methode mit googlebooks

Dies ist mein Code in main.rb

get '/list' do 
    @books = GoogleBooks.search(params[:title]) 
    erb :list 
end 

get '/info/:isbn' do 
    #this is to get the info from my database if there is any 

    if book = Book.find_by(isbn: params[:isbn]) 
    @book_title = book.title 
    @book_authors = book.author 
    @book_year = book.year 
    @book_page_count = book.page_count 
    @book_id = book.id 
    @book_isbn = book.isbn 
    else 
    #use the gem to look for the data 

    text = GoogleBooks.search(params[:isbn]) 
    @book_title = text.title 
    @book_author = text.authors 
    @book_year = text.published_date 
    @book_cover = text.image_link(:zoom => 2) 
    @book_page_count = text.page_count 
    @book_notes = text.description 
    #and then store it into the database 

    book = Book.new 
    book.title = @book_title 
    book.authors = @book_authors 
    book.publish_date = @book_year 
    book.image_link = @book_cover 
    book.page_count = @book_page_count 
    book.description = @book_notes 
    book.isbn = params[:isbn] 
    book.save 
    @book_id = book.id 

    end 

erb :info 
end 

Dies ist meine erb-Datei: Liste

<div class='list_by_title'> 
    <% @books.each do |text| %> 
    <ul> 
     <li class='list_by_title'> 
     <a href="/info/<%= text.isbn_10 %>"><%= text.title %> (Authour: <%= text.authors %>)</a> 
     </li> 

    </ul> 
    <%end%> 
</div> 

Die Liste Teil funktioniert .. Ich bin in der Lage, eine Seite mit einer Liste haben der Titel ... ist das Problem, wenn ich versuche, die Daten aus dem params isbn zu nennen, ich diesen Fehler immer haben:

NoMethodError at /info/0596554877 
undefined method `title' for #<GoogleBooks::Response:0x007ff07a430e28> 

Jede Idee für eine mögliche Lösung?

+0

können Sie melden den JSON, den Sie von der API erhalten, und prüfen Sie, was falsch ist. –

Antwort

0

Gemäß documentation ist GoogleBooks::Response ein Enumerator. Sie müssen also mit der Methode each darüber iterieren und die Methode title für einzelne Objekte aufrufen, die vom Enumerator abgerufen wurden.


result = GoogleBooks.search(params[:isbn]) 
result.each do |text| 
    @book_title = text.title 
    ... 
end 

Variablenname text für Details über ein Buch ist kein guter Name, müssen Sie apt Variablennamen wählen, viele Male gute Variablennamen erleichtert das Debuggen

+0

vielen dank !!! –