2016-03-30 12 views
-1

Ich möchte zwei Werte in den DB (Benutzer-ID und Benutzername) mit nur einem Formularauswahlfeld speichern. Ist das überhaupt möglich? Das ist, was ich habe, so weit:Formular-Select mehr als 1 Wert speichern

<%= f.collection_select(:user_id, User.where(brand: current_user.brand), :id, :name, {prompt:true}, {class: 'form-control'}) %>

, dass nur die user_id spart (aus: id) an die DB. Wie würden Sie dies erweitern, um auch den Benutzernamen (from: name) in der DB zu speichern?

<%= f.collection_select(:user_id, :user_name, User.where(brand: current_user.brand), :id, :name, {prompt:true}, {class: 'form-control'}) %>

funktioniert nicht.

Vielen Dank im Voraus!

Antwort

1

Sie müssen wirklich nur die user_id speichern, um alle anderen Attribute zu referenzieren.

Ich verwende gerne options_for_select und übergeben Sie ein zweidimensionales Array, wenn ich eine ID speichern. Der erste Wert ist, was der Benutzer sieht. Der zweite Wert wird sein, was ich tatsächlich spare. In diesem Fall nehme ich an, dass Sie möchten, dass der Benutzer eine username sieht, aber Sie möchten die user_id tatsächlich speichern.

, dass so etwas aussehen würde:

<%= f.select :user_id, options_for_select(User.choices) %> 

und dann in user.rb:

def self.choices 
    choices = [] 
    User.find_each { |u| choices << [u.username, u.id] } 
    choices 
end 

Sie müssen nicht beide Werte speichern, weil Sie immer alle Attribute auf Benutzer gespeichert zugreifen können mit der ID.

EDIT:

pro Ihren Kommentar, die Sie tatsächlich benötigen keine Auswahlbox überhaupt. setzen Sie sie einfach in Ihre Aufträge Controller create action:

@order.username = current_user.username 
@order.user_id = current_user.id 

if @order.save 
    # etc 

Auch wenn Sie nicht wirklich den Benutzernamen speichern müssen, wenn Sie die user_id als Fremdschlüssel haben. Mit einem Fremdschlüssel können Sie immer eine Instanz der Bestellung annehmen und sagen order.user.username und erhalten den entsprechenden Benutzernamen für diese user_id.

+0

Das sieht gut aus. Der Grund, warum ich versuchte, es so zu machen, wie ich es versucht habe, ist, dass ich '' order.user_id = current_user.id' und '' order.user_name = current_user.name' bei der Erstellungsaktion speichere. – CottonEyeJoe

+0

Wenn du das willst ... brauchst du eigentlich gar keine Auswahlbox. Ich werde einen Schnitt machen, um es zu erklären. – toddmetheny

+1

Vielen Dank! Das funktioniert – CottonEyeJoe

Verwandte Themen