Sto aggiornando un'applicazione a Rails 4 e non riesco, per tutta la vita, a capire cosa c'è di sbagliato in questo metodo. L'autore del reato è il metodo di aggiornamento:Rails 4: cosa c'è di sbagliato con questo metodo?
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
Cliccando submit
genera questo errore:
ActionController::UnknownFormat in DocsController#update
e mette in evidenza questa linea:
respond_to do |format|
Il metodo create funziona bene, sembra che questo:
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
Qualche idea? Sono completamente bloccato.
Oh, ho questo metodo privato come un before_action
troppo, quindi non è che:
private
def set_document
@doc = Doc.find(params[:id])
end
EDIT
ho trovato questo quasi-spiegazione:
In Rails 4.0, ActionController::UnknownFormat is raised when the action doesn't handle the request format. By default, the exception is handled by responding with 406 Not Acceptable, but you can override that now. In Rails 3, 406 Not Acceptable was always returned. No overrides.
che mi fa pensare che sia qualcosa a che fare con i percorsi, ma i miei percorsi dovrebbero essere predefiniti se li ho dichiarati così, sì?
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 }
end
EDIT 2
Aggiunta del JSON al controller, vale a dire:
format.html { redirect_to share_url(@doc.user.ftp, @doc) }
format.json { render action: 'share', status: :created, location: @doc }
mi dà un errore di metodo e sembra reindirizzare mi riporta alla pagina di modifica:
Showing .../fin/app/views/docs/_form.html.erb where line #19 raised:
undefined method `covers?' for nil:NilClass
Davvero non ho idea di cosa sta succedendo qui.
hai un 'remote: true' sul modulo? è inviato tramite JS? hai un 'respond_to: json' nel tuo controller? – phoet
Non c'è 'remote: true' nel modulo e non viene inviato tramite JS. Non c'è 'respond_to: json' nel mio controller perché per quanto ne so non ne ho bisogno. –