Приложение My Rails 5 выполняет четыре вызова API и отображает результаты на странице шоу.У меня есть button_to, которая вызывает запрос Ajax POST на странице шоу, чтобы пользователи могли голосовать за своих избранных.Это вызывает некоторые JS, который отлично работает в разработке и производстве на моем ноутбуке.Браузеры на моем iphone, тем не менее, используют полный URI контроллера и пытаются загрузить его.Button_to возвращает 204: нет содержимого.
Я попытался перенаправить на другую страницу / шоу после вызова Ajax, а также перенаправить с помощью браузера gem, если пользователь на мобильном телефоне, но эти страницы вылетают, если пользователь обновляет их.Я попытался явно вернуть состояние 200 в контроллере, но для этого требуется перенаправление.Я хочу, чтобы пользователь оставался на странице / show, поэтому больше ничего с перенаправлением не работает для меня.
В модели:
def self.first_api(term)
call_url = FIRST_CALL_URL
response = HTTParty.get(call_url,
{ headers: {
"Accept": "application/json",
"app_id": "#{ENV['FIRST_API_APP_ID']}",
"app_key": "#{ENV['FIRST_API_APP_KEY']}" }
})
if response.include?("!DOCTYPE")
"NO DEFINITION"
else
response
end
end
Контроллер (усеченный):
def show
@full_call = FullCall.find(params[:id])
end
def create
@full_call = FullCall.where(word:full_call_params[:word]).first_or_create do |call|
call.first_api_response = FirstCall.first_api(call.word)
end
end
if @full_call.save
redirect_to @full_call
else
render 'new'
end
def vote_for_first
@full_call.first_vote += 1
@full_call.save
end
private
def full_call_params
params.require(:full_call).permit(:word, :definition)
end
Соответствующие маршруты:
resources :full_calls
post 'vote_for_first', to: 'full_calls#vote_for_first'
/ показать страницу:
<p>
<div>
<h2 id='full-call-heading'><%= @full_call.word.upcase %></h2>
<div id='full-call-alert'></div>
</div>
</p>
<div class="container">
<div class="card-title">
<div class="card card-default">
<div class="card-header"><strong>First Call Definition:</strong>
<div>
<%= button_to('VOTE FOR FIRST', { controller: 'full_calls',
action: 'vote_for_first',
id: @full_call,
remote: true },
{ class: "btn btn-outline-secondary btn-sm vote-btn" }) %>
</div>
</div>
<div class="card-block"><%= @full_call.first_api_response %></div>
application.js
$(document).on('turbolinks:load', function() {
$('.vote-btn').on('click', function() {
setTimeout(function() {
$('.vote-btn').attr('disabled', true);
$('#full-call-alert').append("<h5>Thanks for voting!</h5>").hide().slideDown('slow');
}, 100);
});
});
И, наконец, URL-адрес, который возвращает сообщение «Ошибка загрузки» только в мобильных браузерах:
myapp.herokuapp.com/vote_for_first?id=12&remote=true
Любые идеи?