Rails ActionController :: UnknownFormat error with response_to

I am getting this error when trying to use ajax. I did some searching but was unable to solve my problem.

ActionController::UnknownFormat

Draft controller:

  def index
    if params["format"] != nil
      @draft = Draft.find_by(id: params["format"].to_i)
      respond_to do |format|
        format.js
      end
    end
    @draft = current_user.drafts.build
    @drafts = current_user.drafts.non_submitted
    @being_edited_drafts = current_user.drafts.being_edited
    @completed_drafts = current_user.drafts.completed
  end

      

index.js.erb

$('.draft_<%= @draft.id %>').trigger('click');

      

Magazine:

Started GET "/drafts.132" for 127.0.0.1 at 2014-11-26 11:56:28 -0800
Processing by DraftsController#index as 
  User Load (0.5ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 4  ORDER BY     "users"."id" ASC LIMIT 1
  Draft Load (0.4ms)  SELECT  "drafts".* FROM "drafts"  WHERE "drafts"."id" = 132 LIMIT 1
Completed 406 Not Acceptable in 5ms

ActionController::UnknownFormat - ActionController::UnknownFormat:
actionpack (4.1.7) lib/action_controller/metal/mime_responds.rb:440:in   `retrieve_collector_from_mimes'
actionpack (4.1.7) lib/action_controller/metal/mime_responds.rb:256:in `respond_to'
app/controllers/drafts_controller.rb:16:in `index'
actionpack (4.1.7) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.1.7) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.1.7) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.1.7) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.1.7) lib/active_support/callbacks.rb:113:in `call'
activesupport (4.1.7) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.7) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.7) lib/active_support/callbacks.rb:229:in `block in halting'
activesupport (4.1.7) lib/active_support/callbacks.rb:215:in `block in halting_and_conditional'
activesupport (4.1.7) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.7) lib/active_support/callbacks.rb:166:in `block in halting'

      

Create method. This loads the index with parameters ["format"]

def create
  @draft = Draft.create(draft_params)
  if @draft.save
    redirect_to drafts_path(@draft.id),notice: "Draft was successfully saved"
  else
    render action: 'new'
  end
end

      

Form where the create method is called

= form_for @draft, :html => { :multipart => true } do |f|
  = f.hidden_field :user_id, value: current_user.id
  #new-post-title
    = f.text_field :title, :value => "<h1><b>Title</b></h2>"

  #new-post-body
   = f.text_area :body, :value => "<p>Start writing</p>"

  .text-center
   = f.submit "New Draft", :class => "btn btn-sm btn-primary btn-round"

      

+3


source to share


3 answers


First, you still specify instance variables after your implicit call render

(in a block respond_to

). These instance variable declarations must go above any rendering.

Also, I've seen this happen in some browsers. You can get around it by declaring a dummy render block for the type html

, so something like:



respond_to do |format|
  format.html { render(:text => "not implemented") }
  format.js
end

      

The format block html

will most likely never be called, but its declaration nonetheless.

+4


source


You need to add remote: true

to the form helper as you are trying to submit the form using ajax.



= form_for @draft, :html => { :multipart => true }, remote: true do |f|
  = f.hidden_field :user_id, value: current_user.id
  #new-post-title
    = f.text_field :title, :value => "<h1><b>Title</b></h2>"

  #new-post-body
   = f.text_area :body, :value => "<p>Start writing</p>"

  .text-center
   = f.submit "New Draft", :class => "btn btn-sm btn-primary btn-round"

      

+1


source


This issue happened to me and referred to just add

 respond_to :html, :json

      

to your application_controller.rb file

You can check development issues on Github: https://github.com/plataformatec/devise/issues/2667

-1


source







All Articles