2016-04-07 17 views
0

Ich habe Probleme beim Aktualisieren eines Werts in meiner Datenbank für jeden Benutzer mit dem Pfad, den ich gerade verwende, mithilfe von Optionsfeldern.Optionsfeld Aktualisieren der Datenbank nur mit dem letzten Wert

<% @users.each do |user| %> 

<% result = 0%> 

<h4> <%= user.name %> </h4> 

<%= form_for(user) do |f| %> 

    <%= f.label :Quetion_one %> 
    <%= f.radio_button :question_one, result = 1 %> 
    <%= f.radio_button :question_one, result = 2 %> 
    <%= f.radio_button :question_one, result = 3 %> 
    <% user.update_attribute(:question_one, result) %> 
    <% end %> 
<% end %> 

Ich verwende Paginate, aber das ist nebensächlich. Ich versuche, jeden Benutzer durchzugehen und einen Wert für eine Frage zu wählen, entweder 1, 2 oder 3, aber leider, wie ich es eingerichtet habe, setzt es nur den letzten Wert (3) in die Datenbank für jeden Benutzer . Ich dachte, wenn ich eine Ergebnisvariable habe und sie auf einen bestimmten Wert für jedes Optionsfeld setze, würde das update_attribute den Wert auf den gewählten Wert setzen, tut es aber nicht. Es ist möglich, dass ich Radioknöpfe nicht vollständig verstehe oder mir etwas fehlt, aber ich würde die Hilfe sehr schätzen. Danke im Voraus!

Antwort

0

Sie sollten nicht innerhalb der Ansicht wie folgt aktualisieren.

Sie sollten in der Ansicht ein Formular erstellen, das Werte an eine Controlleraktion sendet (in diesem Fall users_controller#create und/oder users_controller#update). Anschließend können Sie das Modell mit den Attributwerten aktualisieren.

Was die Form, sollte diese Arbeit (basierend auf dem method's documentation):

<%= form_for(user) do |f| %> 
    <%= f.label :Question_one %> 
    <%= f.radio_button :question_one, 1 %> 
    <%= f.radio_button :question_one, 2 %> 
    <%= f.radio_button :question_one, 3 %> 
    <%= f.submit %> 
<% end %> 
+0

Ja, ich hatte über die Aktualisierung in der Steuerung gelesen. aber ich verstehe nicht vollständig, wie der Controller zum Aktualisieren verwendet wird, und in diesem Fall hat mein Controller für die .erb-Klasse den Paginat-Code darin, sodass ich keinen einzelnen Benutzer in dieser bestimmten def-Klasse aktualisieren kann. Vielleicht haben Sie eine gute Ressource für mich, um mehr über das Aktualisieren von Informationen im Controller zu erfahren? Sorry, ich bin brandneue Marken in Rails, also sind ein paar Dinge immer noch sehr verwirrend. – user3376654

+0

Ich verstehe. Im Grunde werden Sie über ein HTML-Formular Werte an Ihren Controller senden, der dann entscheidet, was Sie damit machen sollen (in Ihrem Fall aktualisieren Sie Ihre Benutzer). Diese Artikel könnten gute Startpunkte sein: http://www.sitepoint.com/building-your-first-rails-application-views-and-controllers/ und http://guides.rubyonrails.org/getting_started.html#getting -up-and-running – born4new

+0

Vielen Dank, ich werde anfangen, sie jetzt zu lesen! – user3376654

0

Ich weiß nicht, warum Sie Benutzer im Hinblick aktualisieren möchten selbst und das ist gegen die Schienen Konvention. Sie sollten die Update-Aktion in Controller wie (Controller # Update) verwenden. Und verwenden Sie nur Senden-Schaltfläche in Sicht.

<%= form_for(user) do |f| %> 
    <%= f.label :Quetion_one %> 
    <%= f.radio_button :question_one, result = 1 %> 
    <%= f.radio_button :question_one, result = 2 %> 
    <%= f.radio_button :question_one, result = 3 %> 
    <%= f.submit "Update" %> 
<% end %> 

Auch wenn Sie im Hinblick auf sich selbst aktualisieren wollen, dann wird es dem Benutzer Ergebnis aktualisieren = 0 aber es werden nicht aktualisiert, um den Wert gesetzt, nachdem Kontrollkästchen aktivieren, weil user.update_attributes (: question_one => Ergebnis) wird vor dem Rendern der Ansicht ausgeführt. also wird dies nicht die update_attributes-Methode beim Auswählen des Kontrollkästchens auslösen. Daher müssen Sie die Schaltfläche "Senden" verwenden und die Aktion ** Update "" im Benutzer-Controller hinzufügen.

def update 
user = User.where(:id => params[:id]).first 
if user && user.update_attributes(params[:user]) 
    #on sucess 
else 
    #on failing to update 
end 
end 
Verwandte Themen