2012-03-23 12 views
1

Ich habe 2 Modelle namens wearquest und Status. wearquests has_many Status und Status gehört zu wearquest. Die Statustabelle hat einen Fremdschlüssel namens worequest_id.Ruby - Setzen Sie den Fremdschlüssel aus der globalen Variable

Wenn jemand eine Verschleißanforderung betrachtet, möchte ich ihnen erlauben, einen neuen Statusrekord zu erstellen.

Also, ich habe eine Schaltfläche auf der wearquest Show-Seite erstellt. Ich dachte, dass ich die worequest.id in einer globalen Variablen wie diese retten würde und verknüpfen den neuen Status Datensatz zu erstellen:

<% $current_request = @worequest.id %> 
<%= link_to 'New Status', new_status_path, :class => 'btn btn-primary' %> 

Dann in der neuen Status-Seite, ich habe diesen Code:

<% if $current_request == nil %> 
    <%= f.input :worequest_id, :label => 'Request ID' %> 
<% else %> 
    <% f.text_field :worequest_id, :value => $current_request %> 
    <% $current_request = nil %> 
<% end %> 

Aber das worequest.id-Feld im Statusrekord ist am Ende null. ich auch versucht:

<% f.input :worequest_id, :value => $current_request %> 

Irgendwelche Ideen?

+0

Globale Variablen sind SCHLECHT! Jetzt kann ich nicht genau sagen, was Sie hier versuchen, aber ich kann Ihnen versprechen, dass Globals nicht der richtige Weg sind. Versuchen Sie, 'wearquest_id = whatever' zu Ihrer [query string] hinzuzufügen (https://en.wikipedia.org/wiki/Query_string). Ich glaube, dass die "link_to" -Funktion alle nicht erkannten Hash-Optionen zu der Abfrage-Zeichenfolge hinzufügt, so sollte es ziemlich schmerzlos sein. –

Antwort

0

Sie sollten nur Sitzungen verwenden.

session[:worequest_id] = @worequest.id 

Dann, wenn Sie auf die andere Seite zu gelangen, rufen Sie einfach den Wert zurück und steckte es in.

f.hidden :worequest_id, :value => session[:worequest_id] 
0

Dank Mizuho. Ich nutzte die Sitzung Idee:

<%= f.hidden_field :worequest_id, :value => session[:worequest_id] %> 

Bevor Sie Ihren Kommentar, ich habe nicht die = nach dem <%. Sobald ich es eingefügt habe, hat es funktioniert.

Verwandte Themen