ActionController:: Unknown format with format.js pour la mise en œuvre d'ajax (Rail 4)
J'essaie D'utiliser Ajax dans mon application avec les Rails 4. Pour envoyer mon js pour le client j'utilise :
respond_to do |format|
format.js
end
dans mon contrôleur. Mais c'est une erreur générée "ActionController::UnknownFormat" i mon controller. Quelqu'un peut m'aider s'il vous plaît ?
main_controller.rb:
class Oweb::MainController < ApplicationController
def index
.....
end
def setmagasinstatus
begin
@mag = Magasin.find(params[:id])
if @mag.etatmagasin.lib == 'Ouvert'
@mag.etatmagasin = Etatmagasin.where(lib: 'Fermé').first
else
@mag.etatmagasin = Etatmagasin.where(lib: 'Ouvert').first
end
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid Magasin #{params[:id]}")
redirect_to_index("Invalid Magasin")
else
@mag.save
@mags = Magasin.where(user_id: current_user.id)
respond_to do |format|
format.js
end
end
end
end
setmagasinstatus.js.erb:
page.replace_html("bloc_magasin", :partial => "listmagasins", :object => @mags)
layouts/de l'application.HTML.slim:
doctype html
html
head
meta charset="utf-8"
meta http-equiv="X-UA-Compatible" content="IE=edge"
meta name="viewport" content="width=device-width, initial-scale=1.0"
meta name="description" content=""
meta name="author" content=""
title = yield(:title)
= stylesheet_link_tag "application"
= csrf_meta_tags
body
.........
= yield
= javascript_include_tag "application"
= yield :scripts
gemfile:
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.1'
group :development do
gem 'mysql2'
end
group :production do
gem 'pg'
end
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'therubyracer', platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'spring', group: :development
gem 'devise', '~> 3.2.4'
gem 'slim-rails', '~> 2.1.4'
gem 'bootstrap-sass', '~> 3.1.1.1'
gem 'compass-rails', '~> 1.1.7'
gem 'simple_form', '~> 3.0.2'
gem 'activeadmin', github: 'gregbell/active_admin'
gem 'polyamorous', github: 'activerecord-hackery/polyamorous'
gem 'ransack', github: 'activerecord-hackery/ransack'
gem 'formtastic', github: 'justinfrench/formtastic'
gem 'debugger', group: [:development, :test, :production]
gem 'geocoder'
gem 'gmaps4rails', '~> 2.1.2'
logs:
Started GET "/oweb/main/setmagasinstatus?id=3" for 192.168.56.1 at 2014-08-01 06:22:06 +0000
Processing by Oweb::MainController#setmagasinstatus as HTML
Parameters: {"id"=>"3"}
Completed 406 Not Acceptable in 103ms
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/oweb/main_controller.rb:24:in `setmagasinstatus'
Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (2.1ms)
Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.2ms)
Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.1ms)
Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (27.1ms)
3 réponses
Capture:
Votre journal de la console dit:
traitement par L'Ogeb:: MainController#setmagasinstatus comme HTML
dans l'action de votre controller, vous n'avez pas pris en charge la réponse HTML. C'est pourquoi vous faites face à l'erreur de UnknownFormat
.
Solution:
Ajouter format: "js"
dans votre appel ajax. Par exemple:
$.ajax url: "/oweb/main/setmagasinstatus", data: 'id=' + id, format: 'js'
Si vous pouvez utiliser link_to
fonction d'aide pour appeler l'action de votre contrôleur, dans votre cas Oweb::MainController#setmagasinstatus
ajout :remote => true
link_to
helper va résoudre le problème.
par exemple, si vous avez un lien vers votre action et que vous voulez obtenir une réponse en ajax, le code suivant créera le lien vers cette action:
<%= link_to your_link_name, setmagasinstatus_path(:params), :remote => true %>
Voici une mort facile de l'échantillon https://coderwall.com/p/kqb3xq/rails-4-how-to-partials-ajax-dead-easy
HTML
on dirait que le problème est que vous envoyez un HTML
demande pour quelque raison que ce soit:
Oweb:: MainController#setmagasinstatus as HTML
je suppose que l'erreur "unkown format" sera donc causée par votre manque de définition pour le html
mime-tapez dans votre action. J'imagine que cela pourrait aider à résoudre l'erreur à niveau de surface:
respond_to do |format|
format.js
format.html
end
Ajax
si ce qui précède est correct, la question se tourne alors vers "pourquoi un type mime HTML est-il envoyé?"
en raison de ne pas être en mesure de voir votre code Ajax réel, je recommande le problème sera être que vous êtes juste en envoyant une requête HTTP (ajax est XHR); ou vous avez un problème avec la déclaration auprès de la requête ajax
Vous devez rappelez-vous que Ajax (Javascript et XML asynchrones) est conçu pour envoyer une demande en votre nom -- comme un pseudo navigateur. Cela signifie que si vous voulez envoyer une requête ajax, cela doit être fait par Javascript (d'où le format.js
type mime gestionnaire)
--
personnellement, je pense que vous n'envoyez pas de demande ajax, bien qu'il se pourrait aussi que vous envoyiez un autre dataType
, comme JSON