2016-07-22 5 views
0

Ich verwende collection_select, um eine Option aus einem Dropdown auszuwählen. Wenn ich das Formular abschicke, möchte ich mehrere Params in den Params-Hash schicken. In diesem Fall 'team_id' und 'team_name'. team_id erscheint im params hash ganz gut. 'team_name' ist der Wert, der in der Dropdown-Liste angezeigt wird.rails 4, collection_select, mehr als ein Attribut in params-Hash auf Formular übergeben übergeben?

view.html.erb

<%= form_for @carpool do |f| %> 
    <h3>Select Team</h3> 
    <div class="form-group"> 
     <%= f.collection_select :team_id, @ts_teams ? @ts_teams : [], :id, :name, include_blank: true %> 
    </div> 
     <%= f.submit 'Create Carpool', :class => 'button left' %> 
    <% end %> 

params Hash

{"utf8"=>"✓", "authenticity_token"=>"bdazhLNLZ0QunrpJT7Gu63ipX76WME+ENSxL/B0XGeFL/GP5nishozmQENe22aelfcnnhnPBr4B35MeRL+kJLQ==", "carpool"=>{"team_id"=>"1923565"}, "commit"=>"Create Carpool", "controller"=>"carpools", "action"=>"create"} 

Wie kann ich TEAM_NAME in den params-Hash übergeben?

+0

Was wollen Sie mit 'team_name' in Ihrer Controller-Methode zu tun? Gibt es einen Grund, warum du es vom params hash bekommen willst? – MarsAtomic

+0

Yup - Ich möchte ein Carpool-Objekt erstellen - Ich möchte die 'Name' Eigenschaft des Carpool-Objekts auf den Namen des Teams ... Team-Name setzen. Vielleicht gibt es einen einfacheren Weg, dies zu tun ... – matthewalexander

Antwort

0

Sie können bekommen, was Sie wollen, ohne durch flammende Reifen zu springen, indem Sie nur eine Instanz von Team erstellen (was Sie wahrscheinlich sowieso schon machen) und nur den Namen direkt erhalten.

In Ihrer Controller-Methode:

@team = Team.find(params[:team_id]) 
@team_name = @team.name 
+0

Guter Vorschlag, aber der Grund, warum ich durch brennende Reifen hüpfe, ist, dass ich kein Team-Modell erstellen muss. Ich habe das vorher gemacht, und es hat natürlich funktioniert. Aber ich musste eine zusätzliche Datenbankabfrage machen, die im Grunde sinnlos ist - weil ich nur den Namen des Teams brauche. – matthewalexander

+0

Was ich geschrieben habe und was du hattest, ist "The Rails Way". Der Versuch, eine kleine db-Transaktion mehr oder weniger zu vermeiden, führt an dieser Stelle zu einer vorzeitigen Optimierung. Die einzigen Alternativen, die ich mir vorstellen kann, sind die quälende Manipulation von versteckten Feldern mit JavaScript und das Übergeben von Parametern in der URL. Ich bin jedoch weit davon entfernt, Experte zu sein, vielleicht kennt also jemand anders eine magische Art, die 'text_method' aus der Auswahl heraus und in den Params-Hash hineinzulegen. – MarsAtomic