2013-06-14 12 views
11

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.

+2

hai un 'remote: true' sul modulo? è inviato tramite JS? hai un 'respond_to: json' nel tuo controller? – phoet

+0

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. –

risposta

2

Un possibile motivo può essere che se @doc.update_attributes(params[:doc]) restituisce false non è stato eseguito alcun blocco di formato nel metodo di aggiornamento.

In genere si esegue l'azione edit in questo caso.

1

Se si utilizza solo HTML, non è necessario disporre di respond_to e format.html.

Problemi correlati