как получить данные из базы данных с помощью ajax - PullRequest
0 голосов
/ 12 октября 2018

Функция успеха не возвращает данные.

Код контроллера такой, как показано ниже

controller / manageprojects.rb

class Manageprojects

    respond_to :html, :json 

    def fetch_currency_symbol 
        @location = Location.find_by_country(params[:country]) 
        @currency_symbol = @location.currency 
        respond_to do |format|
            format.json { render json: @currency_symbol } 
            format.html 
        end
    end 

end    

view / manageprojects / new.html.erb

Функция JavaScript работает так, как показано ниже, и запрос ajax отправляется с параметрами страны

<script type="text/javascript">
  $("#manageproject_location").on('change', function() {

      var country = $('select#manageproject_location :selected').val();
     // alert(country);
        $.ajax({
        url: '/fetch_currency_symbol',
          data: { country : country },
          dataType: 'json',
          type: 'POST',
          success: function(result)
          {
            console.log(result);
            $('#manageproject_symbol').val(result);
          }
        });
  });
</script>

routs.rb
post '/fetch_currency_symbol', to: "manageprojects#fetch_currency_symbol", as: "fetch_currency_symbol"

1 Ответ

0 голосов
/ 12 октября 2018

Я бы подумал, нужно ли это делать с помощью 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="&#x2713;" /><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="&pound;" value="2">Great Britain</option>
      <option data-currency_code="&#8377;" value="3">India</option>
    </select>
  </label>
  <label>Currency symbol: <input type="text" id="manageproject_symbol"/></label>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...