В моем приложении на Rails я хочу визуализировать партиал js.erb после вызова выборки, и по некоторым причинам я не понимаю, что он не работает. Если бы вы могли мне помочь, было бы здорово.
В представлении, событие вызывает эту функцию, которая в основном выполняет запрос на выборку:
function updateState(id, state){
const csrfToken = document.querySelector('meta[name="csrf-token"]').attributes
.content.value;
fetch(window.location.origin + "/update_state", {
method: "POST",
headers: {
'Accept': "JS",
"Content-Type": "application/json",
"X-CSRF-Token": csrfToken
},
body: JSON.stringify({'id': id, 'state': state}),
credentials: "same-origin"
})
}
Тогда в моем контроллере:
def update_state
@model = Model.find(params[:id])
authorize @model
@model.update(state: params[:state])
respond_to do |format|
format.html { redirect_to xxx }
format.js
end
end
В моих файлах js.erb:
console.log('hello');
Однако в этом случае я получаю сообщение об ошибке от сервера:
ActionController :: UnknownFormat
в строке 'reply_to do | format |
У меня такое ощущение, что сервер не понимает заголовок выборки:
«Принять»: «JS»
Когда я просматриваю логи сервера:
Started POST "/update_state" for 127.0.0.1 at 2019-04-04 11:22:49 +0200
Processing by ModelsController#update_state as JS
Но я думаю, что Rails не распознает это. Как мне это сделать?
Я попробовал также это в контроллере:
def update_state
@model = Model.find(params[:id])
authorize @model
@model.update(state: params[:state])
render 'update_state.js', layout: false
end
Который не вызывает ошибок. Я получил на стороне клиента js.erb. Однако он не выполняется (console.log не выполняется).
У вас есть идеи? Большое спасибо за вашу помощь.