ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-darwin14]
Rails 4.2.5.2
Also habe ich seit ein paar Tagen damit kämpfen und nicht sicher, wo ich mich konzentrieren soll. Mein Szenario: Mein Benutzer klickt auf eine Quellanforderungsansicht in REQUEST/index auf eine Schaltfläche, die eine neue Zeile in meiner PERFORMANCE-Zieltabelle erstellt und Attribute aus der Quelle zuweist. Gleichzeitig muss ich ein boolesches Attribut in der Quelltabelle (REQUEST) spiegeln.Wie kann ich eine Ruby-Methode schreiben, mit der ich eine neue Zeile in einer Zieltabelle erstellen kann, während ich ein Attribut in der Quelltabelle bearbeite?
Mein Code ist unten:
REQUEST VIEW
<%= new_performance_path(:attribute_id1 => (source.attribute_id1), :attribute_id2 => (source.attribute_id2), :attribute_id3 => (source.attribute_id3)), class: "btn btn-success" %>
Performance Controller/NEW
def new
@performance = Performance.new(:attribute_id1 => params[:attribute_id1], :attribute_id2 => params[:attribute_id2], :attribute_id3 => params[:attribute_id3])
@performance.completed = false
@performance.save
if @request.present?
@request.available = false # Need to assign 'false' to this boolean attribute
@request.save # Then save it.
end
redirect_to :performances
end
Während der Code die neue Zeile in meiner Performance-Tabelle erstellt, kann ich nicht herausfinden, die Methodensyntax, um das REQUEST-Tabellenattribut effektiv in "false" umzukehren. Dieser Code mit der if-Anweisung verarbeitet, ohne einen erorr zu werfen. Ich habe versucht, die ursprünglich diese in der Performance Controller/NEW, ohne die if-Anweisung, die in einem internen Server-Fehler führt:
def new
...
@request.available = false
@request.save
...
end
RAILS KONSOLE
Completed 500 Internal Server Error in 29ms (ActiveRecord: 10.1ms)
NoMethodError (undefined method `available=' for nil:NilClass):
app/controllers/performances_controller.rb:26:in `new'
Also ich denke, das bedeutet, ich kann‘ t rufen Sie auf Anfrage in meinem Leistungsmodell an. Auf dieser Grundlage habe ich versucht, eine Methode zu meiner Performance-Modell hinzufügen ...
PERFORMANCE.RB
def available
Request.where(:available == true)
end
... aber der Fehler bestehen bleibt. Ich denke, dass ich alle Zeilen in der REQUEST-Tabelle packen muss, wo der boolesche Wert "verfügbar" gleich true ist.
Beachten Sie, dass diese beiden Tabellen nicht direkt miteinander verwandt sind. REQUESTS ist eine Join-Tabelle in meinem Domänenmodell. Die App ist eine Musikanforderungs-App, also ein USER has_many: REQUESTS und: PERFORMANCES und ich verwende vorhandene Zeilen in der REQUEST-Tabelle, um neue Zeilen in der PERFORMANCE-Tabelle zu erstellen, muss aber die Zeile in der Anfragetabelle bearbeiten, wenn a Neue Zeile wird in der Leistung erstellt.
Danke Jungs. Ich lerne immer noch, dass ich neu bei Rails bin und ich habe besonders mit referenziellen Beziehungen zu kämpfen. Danke, dass Sie sich angesehen haben und mir geholfen haben.
wird @request im Controller initialisiert? Kann es nicht in neuer Aktion sehen – Shishir