Объединение смежных полей формы в скрытое значение поля в Rails - PullRequest
0 голосов
/ 17 декабря 2011

Я хочу объединить два значения текстового поля формы и назначить их моему скрытому полю формы в представлении Rails:

<%= f.hidden_field :shortcode, :value => :package :pins %><br />                                                                                                       

  <div class="field">                                                                                                                                                           
    <%= f.label :package_type %><br />                                                                                                                                          
  <%= select("package", "package_type_id", PackageType.all.collect {|p| [p.packagetype, p.id]} ) %>                                                                             
  </div>                                                                                                                                                                        
  <div class="field">                                                                                                                                                           
    <%= f.label :pins %><br />                                                                                                                                                  
    <%= f.text_field :pins %>                                                                                                                                                   
  </div>                             

Я хочу, чтобы: shortcode возвращал объединенные значения значений: package +: pins, введенных в соответствующие поля формы.

Как мне это сделать?

Редактирование, чтобы показать код, используемый для реализации этого в качестве «ответа»:

$('#package_pins').blur(function() {                                                                                                                                        
    var combined = $('select#package_package_type_id option:selected').text() + $('#package_pins').val();                                                                   
    $('#package_shortcode').val(combined);                                                                                                                                  
});  

Добавил этот код в мой "packages.js" в директории app / assets / javascripts.

Обратите внимание, что, поскольку селектор package_type извлекает запись в поле принадлежащей модели, параметры выбора заполняются следующим образом:

<select id=package_package_type_id name="package[package_type_id]">
<option value="551">FFG</option>
<option value="552">FFC</option>
<option value="553">FTA</option>
</select>

где то, что я хотел получить из текста «FFG», а не значение «551», которое в данном случае является идентификатором записи из ActiveRecord. Я смог сделать это с помощью опции: selected '). Text () jquery code.

Еще раз спасибо @maprihoda за указание в правильном направлении!

1 Ответ

0 голосов
/ 17 декабря 2011

Для этого вам нужно написать некоторый код Javascript на стороне клиента.Используя, например, JQuery, вы можете легко получить значения полей package и pins (после того, как пользователь заполнит поле pins), объединить их и обновить значение скрытого поля.

Примерно так (вынужно добавить правильные классы в div, которые оборачивают поля, чтобы это работало):

$('selector for the pins field').blur(function() {
  combined = $('selector for the package_type field').val() + $('selector for the pins field').val()
  $('selector for the hidden field').val(combined)
})
...