Je mets à jour une application vers Rails 4 et je n'arrive absolument pas à comprendre ce qui ne va pas avec cette méthode. Le coupable est la méthode update :
def update
respond_to do |format|
if @doc.articles.find_index { |a| a.changed? }
@doc.publications.destroy_all
end
if @doc.update_attributes(params[:doc])
@doc.create_activity :update, owner: current_user
if current_user.brand.editable? && params[:editing]
format.html { redirect_to editing_url(@doc) }
else
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
end
end
end
end
En cliquant sur submit
génère cette erreur :
ActionController::UnknownFormat in DocsController#update
et met en évidence cette ligne :
respond_to do |format|
La méthode create fonctionne bien, elle ressemble à ceci :
def create
@doc = Doc.new(params[:doc])
respond_to do |format|
if @doc.save
@doc.create_activity :create, owner: current_user
if current_user.brand.editable? && params[:editing]
format.html { redirect_to doc_editing_url(@doc) }
else
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
end
else
format.html { render action: "new" }
end
end
end
Avez-vous des idées ? Je suis totalement bloqué.
Oh, j'ai aussi cette méthode privée en tant que before_action
, donc ce n'est pas ça :
private
def set_document
@doc = Doc.find(params[:id])
end
ÉDIT
J'ai trouvé cette quasi-explication :
En Rails 4.0, ActionController::UnknownFormat est levée quand l'action ne gère pas le format de la demande. Par défaut, l'exception est traitée en répondant avec un 406 Not Acceptable, mais vous pouvez maintenant la remplacer. En Rails 3, 406 Not Acceptable était toujours retourné. Aucun remplacement.
ce qui me fait penser que cela a quelque chose à voir avec les routes, mais mes routes devraient être par défaut si je les ai déclarées comme ceci, non ?
resources :docs, :except => [:new, :show] do
get "adjust/:state" => "docs#adjust", :as => :adjust
patch "editing" => "docs#editing", :as => :editing
patch "reupdate/" => "docs#reupdate", :as => :reupdate
get "pdf" => "docs#pdf", :as => :pdf
collection { post :sort }
ÉDIT 2
Ajouter le JSON au contrôleur, c'est-à-dire :
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
format.json { render action: 'share', status: :created, location: @doc }
me donne une erreur de méthode inconnue et semble me rediriger vers la page d'édition :
Affichage de .../fin/app/views/docs/_form.html.erb où la ligne #19 a levé :
undefined method `covers?' for nil:NilClass
Vraiment aucune idée de ce qui se passe ici.