0

Ich habe ein Formular mit der Option f.select. Ich möchte die Firmen-ID und den Firmennamen hinzufügen, wenn der Firmenname aus den Optionen ausgewählt wird. Ist es möglich, mehrere Attribute in der f.select-Codezeile hinzuzufügen? Dies ist, wie mein Code aussieht:Schienen f.Select Speichern Sie einen Namen zur gleichen Zeit

<div class="field"> 
<%= f.label 'Client' %> 
<%= f.select :client_id, Client.all.collect { |c| [ c.companyName, c.id ] } %> 

Ich möchte auch Company meiner zuweisen: Firmenname Attribut, aber die ID ist die einzige Sache, die gerade jetzt gespeichert wird.

Danke.

Antwort

0

Ich denke, Sie können dafür Verbände verwenden. Sie sollten 2 Modelle wie unten haben.

class Company < ApplicationRecord 
has_many :clients 
end 

class Client < ApplicationRecord 
belongs_to :company 
end 

Sie soll diese für die Darstellung aller Clients Liste Variable statt in Ansichten verwenden, mit

<%= f.select :client_id, @clients.collect { |client| [ client.name, client.id] } %> 

Controller:

@clients = Client.all 

anschließend auf den client_id wird die Steuerung übergeben werden. Sie können dann die Firma finden, die mit dem Kunden und anderer Logik verbunden ist.

client = Client.find(params[:client_id]) 
company = client.company 
# etc .. 
0

In der Controller-Aktion, in der Ihr Formular übermittelt wird, können Sie vor dem Speichern oder Aktualisieren des Datensatzes schreiben.

params[:your_object][:companyName]=Client.find_by(id: params[:your_object][:client_id]).companyName 

zu einem Add params[:your_object][:companyName] zu Ihrem starken params bleiben. z.B.

params.require(:your_object).permit(:client_id, ... , :companyName) 

Vor allem sollten Sie Ihre client_id in demselben Objekt und erlaubt und gelten gleiche companyName Attribut

this helps

Verwandte Themen