Я бы подумал, нужно ли это делать с помощью ajax-запроса.Разве вы не можете просто прикрепить символы к элементам <option>
в качестве атрибутов данных?
module LocationsHelper
def location_options(locations)
options_for_select(
locations.map{ |c| [c.name, c.id, {'data-currency_code'=>c.currency}] }
)
end
end
Этот вспомогательный метод возвращает массив массивов, подходящих для помощников выбора рельсов, и предполагает, что местоположения имеют атрибут имени.и что вы можете получить символ валюты, позвонив location.currency
.Адаптируйте его к фактическим настройкам.
Затем вы можете создать тег выбора с помощью:
<%= f.select(:location_id, location_options(Location.all)) %>
Это позволит вам просто считывать значения с помощью:
// Use delegated handles to ensure compatibility with turbolinks
$(document).on('change', '#location_id', function() {
var $elem = $(this).find('option:selected');
$('#manageproject_symbol').val($elem.data("currency_code"));
});
<!-- this is just HTML to support the snippet -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="/locations/manage" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="_method" value="patch" /><input type="hidden" name="authenticity_token" value="341Fo3drT5jyTlsTWcsosmclgBaXUqtxI8baubkdZOIlBGDUez/yc1wgW+XqEVcrHCS4U9hDKGAwcIpjtOb/Fw==" />
<label>Location:
<select name="location_id" id="location_id">
<option data-currency_code="$" value="1">USA</option>
<option data-currency_code="£" value="2">Great Britain</option>
<option data-currency_code="₹" value="3">India</option>
</select>
</label>
<label>Currency symbol: <input type="text" id="manageproject_symbol"/></label>
</form>