2010-12-29 13 views
0

Diese Frage scheint lächerlich einfach, aber ich bin festgefahren.Rails 3, Ändern eines bestimmten Wertes in einer Zeile

Lets sagen, dass wir eine Tabelle „Bücher“ haben

Jedes Buch, hat einen Namen, eine Beschreibung und einen Status.

Nehmen wir an, ich möchte Link in der Show-Ansicht erstellen, die beim Klicken nur den Status ändert (zum Beispiel "lesen").

Bisher habe ich versucht, einen Block in der Steuerung das Hinzufügen, das sagt:

def read 

    @book = Book.find(params[:id]) 
    @book.status = "Read" 
    @book.update_attributes(params[:book]) 

    respond_to do |format| 
    format.html { redirect_to :back} 
    format.xml { render :xml => @book } 
    end 

end 

Dann habe ich einen Link zu der Ansicht hinzugefügt, die wie ist: <% = link_to "Read" , read_book_path (@book),: methode =>: put%>

Dies funktioniert überhaupt nicht. Ich habe es meinen Routen hinzugefügt, aber es scheint nicht wichtig zu sein.

Jede Hilfe wäre großartig! Vielen Dank!

-Elliot

EDIT: Vergessen Ich erhalte eine NoMethodError hinzuzufügen: nicht definierte Methode `read_book_path‘

Antwort

2

Sie benötigen eine Methode definieren lesen genannt:

def read 
    @book = Book.find(params[:id]) 

    @book.status = "Read" 
    @book.save 
end 

Dann möchten Sie <% = link_to "Read", read_book_path (@book): remote => true%>

und in routes.rb:

resources :books do 
    member do 
    get 'read' 
    end 
end 

Sobald das funktioniert, Kampf mit der Methode zum Ändern: put

+0

hey Seth, Danke für die Antwort! Als ich es genau so versucht habe, wie du es gesagt hast, bekomme ich anscheinend den gleichen NoMethodError: "undefined Methode' read_book_path 'für " – Elliot

+0

Eigentlich funktionierte es! Ich hatte Sammlung in meiner Route statt Mitglied! Vielen Dank! – Elliot

+0

überprüfen Sie Ihre Pluralisierung. Ressourcen: Bücher. Run "Rake Routen" von der Konsole und poste es bitte – sethvargo

0

Wenn alle Sie versuchen, auf einem Buch das status Attribut gesetzt zu tun und nicht aktualisieren alle anderen Parameter, dann Aufruf update_attributes ist nicht notwendig.

Änderung:

@book.update_attributes(params[:book]) 

zu:

@book.save! 
Verwandte Themen